Register dc3-driver-coap in the driver aggregator POM and add initial
project structure with source and target directories.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sort imports alphabetically, align NotifyPolicyEngine javacadoc
whitespace, move AgenticConstant.Visualization private constructor
before inner class declarations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Align all READMEs, AGENTS.md, CONTRIBUTING.md and dc3/doc/* with the
new Makefile interface (SERVICES/GROUP selectors, REGISTRY=cn, podman
default) and updated Dockerfile structure.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Parametrize JDK/JRE base images via build args in Dockerfile, replace
hardcoded GC/dump env vars with per-service path variables, fix APM
port. Simplify Makefile registry options to global|cn, add SERVICES
and GROUP selectors for targeted compose operations.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add full entity scaffolding (BO/VO/DO/Query/Builder), MyBatis mappers,
DAL managers, services, and REST controllers for notify channels, notify
channel bindings, notify records, rule states, messages, and rules.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add structured extension models for notify channels, channel bindings,
notify record request/response payloads, and rule state tracking.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add AlarmConstant for URL prefixes, AlarmTargetTypeFlagEnum to replace
the deleted AlarmTypeFlagEnum, and new enums for notify channel types,
notify record statuses, and rule states.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Exclude Docker/compose/CI files from builder stage context to avoid
unnecessary cache invalidation. Update Dockerfile comments for
Podman compatibility. Remove package dependency from build target.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add settings-container.xml for Docker builds that connects directly to
Maven Central, avoiding stale mirrors during CI builds.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Update Makefile help text to reflect consolidated optional compose
stack. Remove Aliyun mirror from Maven settings.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Refresh module READMEs, AGENTS.md, CONTRIBUTING.md, and dc3/doc/
guides to reflect the unified Dockerfile, consolidated compose stacks,
and updated build instructions.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add dc3-web frontend service to docker-compose.yml with nginx reverse
proxy as the sole user-facing entry point. Remove backend port mappings
since web now proxies to gateway.
Merge docker-compose-elasticsearch.yml and docker-compose-grafana.yml
into a single docker-compose-optional.yml that includes EMQX, ELK+APM,
and Prometheus+Grafana stacks.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Remove host-side JDK setup and Maven build step from the CI workflow.
The unified Dockerfile now handles Maven build internally via BuildKit
caching, so the runner only needs Docker.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace 14 individual Dockerfiles with a single unified Dockerfile at
the repo root using multi-stage BuildKit targets. Maven build runs
inside the builder stage so no host JDK is required.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Update @since from 2022.1.0 to 2016.10.1 and @version from 2026.5.5
to 2026.5.17 across all Java source files to reflect the actual
project start date.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ScheduleForDataServiceImplTest: the initial() method now throws
ServiceException on SchedulerException instead of silently swallowing
it. Update test to expect the exception and verify the cause chain.
DeviceEventReceiverTest: RabbitAckUtil.ack() catches IOException
internally, so a failing basicAck no longer triggers the outer nack
path. Replace the incorrect nack expectation with a test that verifies
ack was attempted and nack was not called.
DriverScheduleServiceImpl was changed in commit 31dd3ac9 to wrap a
SchedulerException as ServiceException("Failed to initialize driver
scheduler", e) instead of swallowing it, but the matching test
initialSwallowsSchedulerExceptionFromStatusJob still asserted the
old swallow-it behaviour and started failing as soon as the test
suite ran. Rename the test and switch its assertion to expect the
ServiceException with the matching message.
Note: the wrapping itself is also subtly broken — ServiceException has
no (String, Throwable) constructor, so the cause is silently
discarded by the (String, Object...) varargs overload. Fixing that
is left for a separate change that can audit every call site relying
on this exception class together.
Several small but compounding rough edges in dc3-common-rabbitmq picked
up in review:
- application-rabbitmq.yml duplicated listener.simple.acknowledge-mode
and listener.simple.retry settings that have no effect — Spring Boot
only feeds those properties into its auto-configured listener
factory, but the SDK creates its own SimpleRabbitListenerContainerFactory.
Drop the dead settings and add a comment explaining where the live
configuration lives.
- RabbitTemplate's confirm/return callbacks logged the entire message
body, which under a misconfiguration storm could blow up logs;
truncate the body excerpt to 512 bytes and include exchange / routing
key / replyCode / replyText so an operator can identify the failing
publish without rummaging through every other log line.
- Add a sibling highThroughputRabbitListenerContainerFactory bean
(concurrent=4, max=32, prefetch=100) so the existing point-value /
mqtt fan-in listeners can opt in via containerFactory= without
having to re-tune the default factory used for command and metadata
streams.
- ActiveRabbitProfileConfig now honours dc3.rabbitmq.auto-profile=false,
matching the matching switch already in ActiveDriverProfileConfig, so
applications embedding the SDK can keep their own profile model.
ActiveDriverProfileConfig is updated alongside it to read its
property name from EnvironmentConstant for symmetry.
- RabbitAckUtil.ack used to surface IOException while reject and nack
swallowed it — uneven contract that forced every listener to wrap
its ack call. Make all three behave the same: log and continue, since
a closed channel cannot accept any further frames anyway.
EnvironmentConstant gains RABBITMQ_AUTO_PROFILE / RABBITMQ_PROFILE
keys to mirror the existing DRIVER_AUTO_PROFILE / DRIVER_PROFILE pair.