Skip to content

DO NOT MERGE: Changes from upstream master#8

Draft
gmatheu wants to merge 10000 commits into
ascentio-tech:masterfrom
thingsboard:master
Draft

DO NOT MERGE: Changes from upstream master#8
gmatheu wants to merge 10000 commits into
ascentio-tech:masterfrom
thingsboard:master

Conversation

@gmatheu
Copy link
Copy Markdown

@gmatheu gmatheu commented Apr 9, 2019

DO NOT MERGE

Placeholder PR to discuss upstream changes.

ViacheslavKlimov and others added 26 commits April 17, 2026 10:27
# Conflicts:
#	ui-ngx/src/app/shared/components/entity/entity-list-select.component.html
#	ui-ngx/src/app/shared/components/entity/entity-type-select.component.html
Fix issue in entity-list-select.component.html after merge
[OpenApi] Updated api method names to be in sync with PE
Prevents UnrecognizedPropertyException during rolling upgrades when a
newer node writes a cached entity with an added field and an older node
reads it back. The Redis-backed TbJsonRedisSerializer now uses
JacksonUtil.IGNORE_UNKNOWN_PROPERTIES_JSON_MAPPER instead of the strict
OBJECT_MAPPER used by JacksonUtil.fromBytes.
TbRestApiCallNodeTest ran concurrently with SsrfSafeAddressResolverGroupTest,
which toggles the static SsrfProtectionValidator.enabled flag in its
setUp/tearDown. When the flag leaked into the REST test's async HTTP calls,
'localhost' was rejected by SSRF and extra tellFailure invocations broke the
Mockito verify count.

TbHttpClientTest and SsrfSafeAddressResolverGroupTest already declare
@ResourceLock("SsrfProtectionValidator"); apply the same lock to
TbRestApiCallNodeTest so all three SSRF-sensitive tests serialize.

Fixes #15453
…odeTest-ssrf-lock

Fix flaky TbRestApiCallNodeTest via SsrfProtectionValidator ResourceLock
…operties

Ignore unknown properties when deserializing Redis cache entries
fix: use presencePenalty instead of frequencyPenalty for Vertex AI GenerationConfig
…ptions

chore: update AI model autocomplete options
- EntityKeyMapping: replace fragile null-swap of entityKeyColumn with a useAliasAsField flag threaded through buildKeyQuery/buildPredicateQuery, avoiding mutation of shared instance state
- TbAlarmCountSubCtx, TbAlarmDataSubCtx: normalize keyFiltersOperation at query construction via getKeyFiltersOperationOrDefault(), matching DefaultEntityQueryService
- BaseEntityService: end the disabled-OR validation error with a period and attribute it to the system administrator, aligning with the existing UI translation
- EntityQueryControllerTest: extract helpers (createDeviceWithSharedAttributes, createDeviceWithTimeseries, createAlarm, deviceTypeFilter, numericKeyFilter, stringKeyFilter, pageLinkSortedByName, nameEntityField, extractNames) and replace the pagination test's obscure temperature ternary with an explicit array
- Default allowKeyFiltersOrConditions to true in empty auth state
- Remove empty filter-dialog.component.scss and its styleUrls reference
Adds Slack-API-based incident grouping for the monitoring microservice:
alerts that fire within resolution_timeout_s are threaded under a single
"Incident" message whose header tracks affected services in real time, and
the incident auto-resolves after a quiet period with a final summary.

Highlights
- Dual Slack modes: when bot_token + channel_id are set, alerts go through
  chat.postMessage / chat.update with threaded replies; otherwise the
  existing webhook path is used unchanged.
- Incident header shows 🔴 failing / :large_yellow_circle: high
  latency / :large_green_circle: recovered services with live failure
  counts and elapsed duration (updated every minute).
- Notifications carry structured affected-service data
  (AffectedService { name, status, failureCount }) so the incident layer no
  longer parses formatted alert text with regex.
- IncidentManager is decoupled from Slack via a small IncidentTransport
  interface; SlackIncidentTransport adapts SlackApiClient.
- PE/other service-key types can plug in a friendly name via the
  ShortNameProvider interface; TransportInfo implements it.
- Config lives under monitoring.notifications.incident.* (enabled,
  resolution_timeout_s, tag_channel). Slack bot config stays under
  monitoring.notifications.slack.{bot_token,channel_id}. YAML defaults are
  authoritative; Spring @value no longer carries a conflicting fallback.
- Concurrency: state and transport I/O run under the manager's monitor.
  Slack client has explicit 5s call timeouts (set on SlackConfig) so the
  hold time is bounded. Slack client is closed on PreDestroy.
- HTTP failure text is sanitised: HTML response bodies are stripped so
  Nginx-style error pages don't flood alerts.
- BaseMonitoringService splits login / WS connect / WS subscribe into
  distinct MonitoredServiceKey entries, uses catch(Exception) instead of
  catch(Throwable), and wraps WsClient in try-with-resources.
- Unit tests cover incident lifecycle, status transitions, duration
  formatting, HTML body stripping, and the ShortNameProvider dispatch.
- Mark force-added entity-field filter mappings as ignored under OR so
  EntityDataAdapter keeps the response shape identical to AND (applied
  to both findEntityDataByQuery and validateEntityCountQuery paths).
- Skip the ON-clause filter in toLatestJoin when forceLeftJoin=true to
  avoid duplicating the predicate that buildQuery already emits at the
  middle layer under OR (different bound parameter names, same filter).
- Document the empty-predicate drop in buildQuery (safe under AND,
  narrowing under OR) and the defensive vacuously-true return in
  RepositoryUtils.checkKeyFilters.
- Explain why validateEntityCountQuery uses the nullable
  getKeyFiltersOperation() rather than the OrDefault helper.
- Add regression test asserting latest[ENTITY_FIELD] under OR only
  contains keys declared in entityFields.
nickAS21 and others added 30 commits May 14, 2026 14:34
Support for Execute operation with arguments (OMA LwM2M v1.0.2)
[OpenApi] Fixed openapi descriptions for arrays
…rs-new-style

Fixed re-render filters table rows after add, duplicate, or remove
# Conflicts:
#	msa/js-executor/config/default.yml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet