mirror of
https://gitee.com/pnoker/iot-dc3.git
synced 2026-09-01 15:29:04 +08:00
docs(readme): refresh module documentation
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# DC3 API
|
||||
|
||||
`dc3-api` owns the protobuf contracts shared between IoT DC3 processes. It contains generated-contract modules only;
|
||||
business logic belongs in `dc3-common-*` implementations.
|
||||
|
||||
## Modules
|
||||
|
||||
| Module | Contract surface | Primary consumers |
|
||||
|---|---|---|
|
||||
| `dc3-api-auth` | tenant, user, token, permission, resource registry, MCP runtime | gateway and center services |
|
||||
| `dc3-api-data` | point values, command history, event history | manager, drivers, and data clients |
|
||||
| `dc3-api-driver` | driver registration and driver-scoped device/point metadata | protocol drivers |
|
||||
| `dc3-api-manager` | manager-scoped driver, device, profile, point, command, and event metadata | data and other centers |
|
||||
|
||||
Proto sources live under each module's `src/main/protobuf/` directory. Generated Java sources are build artifacts and
|
||||
must not be edited directly.
|
||||
|
||||
## Contract changes
|
||||
|
||||
1. Update the affected `.proto` files.
|
||||
2. Preserve field numbers and RPC compatibility where practical.
|
||||
3. Compile the affected module to regenerate Java sources.
|
||||
4. Update server implementations, builders, and clients together.
|
||||
5. Verify tenant propagation, `GrpcR` error handling, and single/list cardinality naming.
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -f dc3-api/pom.xml compile
|
||||
```
|
||||
|
||||
Use `GetXxx` for single results and `ListXxx` for collections, pages, or maps. Do not reintroduce legacy `SelectXxx`
|
||||
RPC names.
|
||||
|
||||
## Documentation ownership
|
||||
|
||||
Each child README documents its current services and messages. The `.proto` files remain the authoritative source for
|
||||
method names, request/response types, and field definitions.
|
||||
+26
-187
@@ -1,202 +1,41 @@
|
||||
# DC3 API Auth
|
||||
|
||||
## Overview
|
||||
`dc3-api-auth` defines the authentication and authorization gRPC contracts. Generated Java types use the
|
||||
`io.github.pnoker.api.center.auth` package; proto sources live under `src/main/protobuf/api/common/auth/`.
|
||||
|
||||
`dc3-api-auth` provides gRPC service definitions for authentication and authorization in the IoT DC3 platform. It
|
||||
defines the interfaces for tenant management, user authentication, token validation, and local credential lookup.
|
||||
## Services
|
||||
|
||||
## Module Information
|
||||
| Service | RPCs | Purpose |
|
||||
|---|---|---|
|
||||
| `TenantApi` | `GetByCode` | resolve tenant metadata |
|
||||
| `UserApi` | `GetById`, `GetByPrincipalId` | resolve user identity |
|
||||
| `TokenApi` | `CheckValid` | validate login/token material |
|
||||
| `LocalCredentialApi` | `GetByLoginName` | resolve local credentials |
|
||||
| `PermissionApi` | `ListPermissionCodes` | resolve effective permission codes |
|
||||
| `ResourceRegistryApi` | `Sync` | synchronize annotated API/menu resources |
|
||||
| `McpRuntimeApi` | `Introspect`, `ListTools`, `ResolveTool`, `AuthorizeToolCall`, `Audit` | authorize and audit MCP tools |
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-api-auth
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.api.center.auth`
|
||||
Every response uses a contract-specific wrapper containing `GrpcR`. Callers must inspect the result envelope before
|
||||
reading response data.
|
||||
|
||||
## Proto Definitions
|
||||
## Consumers and implementation
|
||||
|
||||
### tenant.proto
|
||||
- `dc3-common-auth` implements the servers as Spring `@Service` beans extending generated `*ImplBase` classes.
|
||||
- `dc3-common-facade-grpc` creates shared blocking stubs and exposes transport-independent auth facades.
|
||||
- `dc3-gateway` uses auth facades for ingress authentication and authorization.
|
||||
|
||||
Defines tenant-related RPC calls and data structures.
|
||||
Business code should depend on facade interfaces instead of generated stubs unless it is itself a transport adapter.
|
||||
|
||||
**Service**: `TenantApi`
|
||||
## Build and Verification
|
||||
|
||||
- `GetByCode` - Query tenant information by tenant code
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcCodeQuery` - Request wrapper for tenant code queries
|
||||
- `GrpcRTenantDTO` - Response wrapper containing tenant information
|
||||
- `GrpcTenantDTO` - Tenant data structure (name, code, enable flag)
|
||||
|
||||
### token.proto
|
||||
|
||||
Defines token validation RPC calls and data structures.
|
||||
|
||||
**Service**: `TokenApi`
|
||||
|
||||
- `CheckValid` - Validate authentication tokens
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcLoginQuery` - Request wrapper with login credentials (tenant, name, password, token)
|
||||
- `GrpcRTokenDTO` - Response wrapper with validation result
|
||||
|
||||
### user.proto
|
||||
|
||||
Defines user-related RPC calls and data structures.
|
||||
|
||||
**Service**: `UserApi`
|
||||
|
||||
- `GetById` - Query user information by user ID
|
||||
- `GetByPrincipalId` - Query user information by principal ID
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcIdQuery` - Request wrapper for user ID queries
|
||||
- `GrpcRUserDTO` - Response wrapper containing user information
|
||||
- `GrpcUserDTO` - User data structure (nickname, username, phone, email)
|
||||
|
||||
### local_credential.proto
|
||||
|
||||
Defines local credential lookup RPC calls and data structures.
|
||||
|
||||
**Service**: `LocalCredentialApi`
|
||||
|
||||
- `GetByLoginName` - Query local credential information by login name
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcLoginNameQuery` - Request wrapper for login-name queries
|
||||
- `GrpcRLocalCredentialDTO` - Response wrapper containing local credential information
|
||||
- `GrpcLocalCredentialDTO` - Local credential data structure (login name, principal ID)
|
||||
|
||||
### permission.proto
|
||||
|
||||
Defines permission lookup RPC calls for RBAC.
|
||||
|
||||
**Service**: `PermissionApi`
|
||||
|
||||
- `ListPermissionCodes` - List the permission codes granted to a principal
|
||||
|
||||
### resource_registry.proto
|
||||
|
||||
Defines resource registry synchronization RPC calls.
|
||||
|
||||
**Service**: `ResourceRegistryApi`
|
||||
|
||||
- `Sync` - Synchronize API/menu resource definitions into the registry
|
||||
|
||||
### mcp_runtime.proto
|
||||
|
||||
Defines MCP (Model Context Protocol) runtime RPC calls for AI tool integration.
|
||||
|
||||
**Service**: `McpRuntimeApi`
|
||||
|
||||
- `Introspect` - Introspect an MCP connection
|
||||
- `ListTools` - List the tools exposed by an MCP connection
|
||||
- `ResolveTool` - Resolve a tool definition by name
|
||||
- `AuthorizeToolCall` - Authorize an MCP tool invocation
|
||||
- `Audit` - Record an MCP tool-call audit entry
|
||||
|
||||
## Dependencies
|
||||
|
||||
This module depends on common proto definitions:
|
||||
|
||||
- `api/common/base.proto` - Base entity fields (ID, timestamps)
|
||||
- `api/common/r.proto` - Common response wrapper
|
||||
|
||||
## Usage
|
||||
|
||||
### 1. Add Dependency
|
||||
|
||||
```xml
|
||||
|
||||
<dependency>
|
||||
<groupId>io.github.pnoker</groupId>
|
||||
<artifactId>dc3-api-auth</artifactId>
|
||||
<version>2026.5.22</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 2. Import Proto Files
|
||||
|
||||
```protobuf
|
||||
import "api/center/auth/tenant.proto";
|
||||
import "api/center/auth/token.proto";
|
||||
import "api/center/auth/user.proto";
|
||||
import "api/center/auth/local_credential.proto";
|
||||
```
|
||||
|
||||
### 3. Implement Service
|
||||
|
||||
```java
|
||||
public class TenantServiceImpl extends TenantApiGrpc.TenantApiImplBase {
|
||||
@Override
|
||||
public void getByCode(GrpcCodeQuery request,
|
||||
StreamObserver<GrpcRTenantDTO> responseObserver) {
|
||||
// Implementation
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## API Features
|
||||
|
||||
### Multi-Tenancy Support
|
||||
|
||||
- Tenant isolation through tenant codes
|
||||
- Tenant-scoped user management
|
||||
- Cross-tenant operations support
|
||||
|
||||
### Authentication Flow
|
||||
|
||||
1. Client queries tenant by code
|
||||
2. Local credential lookup via `LocalCredentialApi`
|
||||
3. Token validation via `TokenApi`
|
||||
4. User information retrieval by principal via `UserApi`
|
||||
|
||||
### Security Features
|
||||
|
||||
- Server-side password hashing
|
||||
- Token-based authentication
|
||||
- User credential management
|
||||
- Login tracking with principal IDs
|
||||
|
||||
## Data Models
|
||||
|
||||
### Tenant Model
|
||||
|
||||
- **tenant_name**: Display name of the tenant
|
||||
- **tenant_code**: Unique tenant identifier
|
||||
- **enable_flag**: Active/inactive status (1=enabled, 0=disabled)
|
||||
|
||||
### User Model
|
||||
|
||||
- **nick_name**: Display name
|
||||
- **user_name**: Unique username
|
||||
- **phone**: Contact phone number
|
||||
- **email**: Email address
|
||||
- **social_ext**: Encrypted social account information
|
||||
- **identity_ext**: Encrypted identity verification data
|
||||
|
||||
### Login Lookup Model
|
||||
|
||||
- **login_name**: Username for authentication
|
||||
- **user_id**: Reference to user entity
|
||||
- **principal_id**: Reference to unified auth principal
|
||||
- **enable_flag**: Account status
|
||||
|
||||
## Build Instructions
|
||||
Run from the repository root:
|
||||
|
||||
```bash
|
||||
# Build the module
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
|
||||
# Install to local repository
|
||||
mvn -s ../../.mvn/settings.xml clean install
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-api/dc3-api-auth -am compile
|
||||
```
|
||||
|
||||
## License
|
||||
This module has no handwritten runtime code or module-specific tests. A successful compile verifies proto syntax and
|
||||
generated Java sources; server/facade behaviour is tested in the implementing modules.
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
When changing the contract, preserve field numbers, update implementations and clients together, and verify that
|
||||
tenant and authorization context remain explicit.
|
||||
|
||||
+21
-260
@@ -1,273 +1,34 @@
|
||||
# DC3 API Data
|
||||
|
||||
## Overview
|
||||
`dc3-api-data` defines gRPC contracts for values, commands, events, status, and system-health queries. Generated Java
|
||||
types use `io.github.pnoker.api.center.data`; proto sources live under `src/main/protobuf/api/common/data/`.
|
||||
|
||||
`dc3-api-data` provides gRPC service definitions for device data collection and management in the IoT DC3 platform. It
|
||||
defines interfaces for querying real-time device point values and historical data retrieval.
|
||||
## Services
|
||||
|
||||
## Module Information
|
||||
| Service | RPCs | Purpose |
|
||||
|---|---|---|
|
||||
| `PointValueApi` | `GetLastValue`, `ListHistoryValues` | query point values |
|
||||
| `PointValueApi` | `ReadCommand`, `WriteCommand` | submit point read/write commands |
|
||||
| `CommandHistoryApi` | `CallCommand`, `GetByRecordId`, `ListByPage` | dispatch and query command history |
|
||||
| `EventHistoryApi` | `ReportEvent`, `GetByRecordId`, `ListByPage` | report and query event history |
|
||||
| `StatusHealthApi` | device/driver status and system-health RPCs | expose status snapshots and summaries |
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-api-data
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.api.center.data`
|
||||
Single-result RPCs use `GetXxx`; collection/page results use `ListXxx` or an explicitly named status aggregation. Do
|
||||
not reintroduce legacy `SelectXxx` names.
|
||||
|
||||
## Proto Definitions
|
||||
## Consumers and implementation
|
||||
|
||||
### point_value.proto
|
||||
- `dc3-common-data` implements the data-side servers.
|
||||
- `dc3-common-facade-grpc` wraps generated stubs in transport-independent facades.
|
||||
- Manager and other business modules should call the facade API rather than construct channels directly.
|
||||
|
||||
Defines point value query RPC calls and data structures for device data collection.
|
||||
All write/report requests must carry tenant context through the transport and into the business layer.
|
||||
|
||||
**Service**: `PointValueApi`
|
||||
|
||||
- `GetLastValue` - Query the latest collected value of a device point
|
||||
- `ListHistoryValues` - Query historical values of a device point
|
||||
- `ReadCommand` - Trigger a read command for a device point
|
||||
- `WriteCommand` - Trigger a write command for a device point
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPointValueQuery` - Request wrapper for point value queries (device_id, point_id, tenant_id)
|
||||
- `GrpcRPointValueDTO` - Response wrapper containing point value information
|
||||
- `GrpcPointValueDTO` - Point value data structure
|
||||
|
||||
### event_history.proto
|
||||
|
||||
Defines device event history RPC calls.
|
||||
|
||||
**Service**: `EventHistoryApi`
|
||||
|
||||
- `ReportEvent` - Report a device event
|
||||
- `GetByRecordId` - Query an event history record by record ID
|
||||
- `ListByPage` - Query event history with pagination support
|
||||
|
||||
### command_history.proto
|
||||
|
||||
Defines device command history RPC calls.
|
||||
|
||||
**Service**: `CommandHistoryApi`
|
||||
|
||||
- `CallCommand` - Issue a command to a device
|
||||
- `GetByRecordId` - Query a command history record by record ID
|
||||
- `ListByPage` - Query command history with pagination support
|
||||
|
||||
### status_health.proto
|
||||
|
||||
Defines device/driver status and system health RPC calls.
|
||||
|
||||
**Service**: `StatusHealthApi`
|
||||
|
||||
- `DeviceStatusesByIds` - Query device statuses by device IDs
|
||||
- `DeviceStatusesByProfileId` - Query device statuses by profile ID
|
||||
- `DriverStatusesByIds` - Query driver statuses by driver IDs
|
||||
- `DriverDeviceStatusSummary` - Summarize device statuses under a driver
|
||||
- `SystemHealth` - Query overall system health
|
||||
|
||||
## Data Models
|
||||
|
||||
### Point Value Model
|
||||
|
||||
The `GrpcPointValueDTO` represents collected data from device points:
|
||||
|
||||
```protobuf
|
||||
message GrpcPointValueDTO {
|
||||
int64 id = 1; // Point value record ID
|
||||
int64 device_id = 2; // Source device identifier
|
||||
int64 point_id = 3; // Point identifier
|
||||
string value = 4; // Processed/converted value
|
||||
string raw_value = 5; // Raw value from device
|
||||
int64 create_time = 6; // Storage timestamp
|
||||
}
|
||||
```
|
||||
|
||||
### Field Descriptions
|
||||
|
||||
| Field | Type | Description |
|
||||
|---------------|--------|------------------------------------------------------|
|
||||
| `id` | int64 | Unique identifier for the point value record |
|
||||
| `device_id` | int64 | ID of the device that generated the data |
|
||||
| `point_id` | int64 | ID of the point (tag) within the device |
|
||||
| `value` | string | Processed value after data conversion and formatting |
|
||||
| `raw_value` | string | Original raw value collected from the device |
|
||||
| `create_time` | int64 | Unix timestamp when data was stored (milliseconds) |
|
||||
|
||||
## Dependencies
|
||||
|
||||
This module depends on common proto definitions:
|
||||
|
||||
- `api/common/r.proto` - Common response wrapper (GrpcR)
|
||||
|
||||
## Usage
|
||||
|
||||
### 1. Add Dependency
|
||||
|
||||
```xml
|
||||
|
||||
<dependency>
|
||||
<groupId>io.github.pnoker</groupId>
|
||||
<artifactId>dc3-api-data</artifactId>
|
||||
<version>2026.5.22</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 2. Import Proto Files
|
||||
|
||||
```protobuf
|
||||
import "api/center/data/point_value.proto";
|
||||
```
|
||||
|
||||
### 3. Implement Service
|
||||
|
||||
```java
|
||||
public class PointValueServiceImpl extends PointValueApiGrpc.PointValueApiImplBase {
|
||||
@Override
|
||||
public void getLastValue(GrpcPointValueQuery request,
|
||||
StreamObserver<GrpcRPointValueDTO> responseObserver) {
|
||||
// Query latest point value from database
|
||||
// Return GrpcRPointValueDTO with point value data
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Query Example
|
||||
|
||||
```java
|
||||
// Build query request
|
||||
GrpcPointValueQuery query = GrpcPointValueQuery.newBuilder()
|
||||
.setDeviceId(12345L)
|
||||
.setPointId(67890L)
|
||||
.setTenantId(1L)
|
||||
.build();
|
||||
|
||||
// Call service
|
||||
GrpcRPointValueDTO response = pointValueApi.getLastValue(query);
|
||||
|
||||
// Extract data
|
||||
if(response.
|
||||
|
||||
getResult().
|
||||
|
||||
getOk()){
|
||||
GrpcPointValueDTO pointValue = response.getData();
|
||||
String value = pointValue.getValue();
|
||||
String rawValue = pointValue.getRawValue();
|
||||
long timestamp = pointValue.getCreateTime();
|
||||
}
|
||||
```
|
||||
|
||||
## API Features
|
||||
|
||||
### Real-Time Data Access
|
||||
|
||||
- Query latest point values by device and point IDs
|
||||
- Support for both raw and processed values
|
||||
- Tenant-scoped data access
|
||||
|
||||
### Data Processing
|
||||
|
||||
- **Raw Value**: Original data read from the device without processing
|
||||
- **Processed Value**: Converted and formatted value after applying:
|
||||
- Unit conversion
|
||||
- Scale factors
|
||||
- Precision formatting
|
||||
- Data type conversion
|
||||
|
||||
### Data Flow
|
||||
|
||||
```
|
||||
Device → Driver → Data Collection → Time Series DB → PointValueApi
|
||||
```
|
||||
|
||||
## Use Cases
|
||||
|
||||
### 1. Real-Time Monitoring
|
||||
|
||||
```java
|
||||
// Monitor device point value in real-time
|
||||
GrpcPointValueDTO latestValue = getLastValue(deviceId, pointId);
|
||||
|
||||
displayValue(latestValue.getValue());
|
||||
```
|
||||
|
||||
### 2. Data Analysis
|
||||
|
||||
```java
|
||||
// Compare raw vs processed values
|
||||
String raw = pointValue.getRawValue();
|
||||
String processed = pointValue.getValue();
|
||||
|
||||
analyzeConversion(raw, processed);
|
||||
```
|
||||
|
||||
### 3. Time Series Operations
|
||||
|
||||
```java
|
||||
// Use timestamp for time-based queries
|
||||
long timestamp = pointValue.getCreateTime();
|
||||
Date collectionTime = new Date(timestamp);
|
||||
```
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
- **Query Optimization**: Always include tenant_id for proper data isolation
|
||||
- **Caching**: Consider caching recent point values for high-frequency queries
|
||||
- **Time Series Store**: This API queries the time-series store through `dc3-common-repository` (PostgreSQL with the
|
||||
TimescaleDB extension)
|
||||
- **Data Volume**: Point value queries can generate high traffic in large-scale deployments
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Driver Services
|
||||
|
||||
Drivers write point values to the data layer:
|
||||
|
||||
```
|
||||
Driver Service → Device SDK → Point Collection → Data Store
|
||||
```
|
||||
|
||||
### Manager Service
|
||||
|
||||
Manager service provides device/point metadata:
|
||||
|
||||
```
|
||||
PointValueApi → ManagerApi (get point info) → Return value with metadata
|
||||
```
|
||||
|
||||
### Application Layer
|
||||
|
||||
Upper applications consume point value data for:
|
||||
|
||||
- Real-time dashboards
|
||||
- Data analytics
|
||||
- Alarm monitoring
|
||||
- Historical data queries
|
||||
|
||||
## Data Retention
|
||||
|
||||
Point values are typically stored in time-series databases with:
|
||||
|
||||
- **High-frequency data**: Raw values for immediate processing
|
||||
- **Aggregated data**: Processed values for long-term storage
|
||||
- **Retention policies**: Configurable by tenant or device type
|
||||
|
||||
## Build Instructions
|
||||
## Build and Verification
|
||||
|
||||
```bash
|
||||
# Build the module
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
|
||||
# Install to local repository
|
||||
mvn -s ../../.mvn/settings.xml clean install
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-api/dc3-api-data -am compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-driver` - Driver interface for point data collection
|
||||
- `dc3-api-manager` - Device and point metadata management
|
||||
- `dc3-common-data` - Data models and DTOs
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
This contract module has no module-specific tests. Compile it after proto changes, then run the matching server and
|
||||
facade tests in `dc3-common-data` and `dc3-common-facade-grpc`.
|
||||
|
||||
@@ -1,400 +1,55 @@
|
||||
# DC3 API Driver
|
||||
|
||||
## Overview
|
||||
`dc3-api-driver` defines the gRPC contract used by protocol drivers to register with the Manager Center and retrieve
|
||||
driver-scoped device and point configuration. Generated Java types use `io.github.pnoker.api.common.driver`.
|
||||
|
||||
`dc3-api-driver` provides gRPC service definitions for driver services in the IoT DC3 platform. It defines the
|
||||
communication interface between device drivers and the platform's manager service, enabling device registration,
|
||||
metadata synchronization, and point value collection.
|
||||
## Services
|
||||
|
||||
## Module Information
|
||||
| Service | RPC | Response | Purpose |
|
||||
|---|---|---|---|
|
||||
| `DriverApi` | `DriverRegister` | `GrpcRDriverRegisterDTO` | register metadata and receive assigned configuration |
|
||||
| `DriverApi` | `GetById` | `GrpcRDriverRegisterDTO` | reload registered driver metadata |
|
||||
| `DeviceApi` | `ListByPage` | `GrpcRPageDeviceDTO` | page through driver-owned devices |
|
||||
| `DeviceApi` | `GetById` | `GrpcRDeviceDTO` | get one device with attached attribute configuration |
|
||||
| `PointApi` | `ListByPage` | `GrpcRPagePointDTO` | page through driver-visible points |
|
||||
| `PointApi` | `GetById` | `GrpcRPointDTO` | get one point with attached configuration |
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-api-driver
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.api.common.driver`
|
||||
Proto sources live under `src/main/protobuf/api/common/driver/`. The `.proto` files are authoritative for fields and
|
||||
wrapper shapes.
|
||||
|
||||
## Proto Definitions
|
||||
## Registration flow
|
||||
|
||||
### driver_driver.proto
|
||||
1. `dc3-common-driver` builds `GrpcDriverRegisterDTO` from the driver's `application.yml` metadata.
|
||||
2. The driver calls `DriverApi.DriverRegister` on the Manager Center.
|
||||
3. The response supplies driver metadata, device IDs, and supported driver/point/command/event attributes.
|
||||
4. `DeviceClient` and `PointClient` load attached configuration with `GetById` or `ListByPage`.
|
||||
5. The SDK initializes protocol scheduling, metadata subscriptions, commands, and value dispatch.
|
||||
|
||||
Defines driver registration RPC calls and data structures.
|
||||
|
||||
**Service**: `DriverApi`
|
||||
|
||||
- `DriverRegister` - Register a driver instance with the platform (used by drivers on startup)
|
||||
- `GetById` - Query driver registration information by driver ID
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcDriverRegisterDTO` - Driver registration request information
|
||||
- `GrpcRDriverRegisterDTO` - Driver registration response with configuration data
|
||||
|
||||
### driver_device.proto
|
||||
|
||||
Defines device-related RPC calls for driver services.
|
||||
|
||||
**Service**: `DeviceApi`
|
||||
|
||||
- `ListByPage` - Query devices with pagination support
|
||||
- `GetById` - Query device by device ID
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPageDeviceQuery` - Paginated device query request
|
||||
- `GrpcDeviceQuery` - Single device query request
|
||||
- `GrpcRPageDeviceDTO` - Paginated device list response
|
||||
- `GrpcRDeviceDTO` - Single device response
|
||||
- `GrpcRDeviceAttachDTO` - Device with full configuration (device + points + attributes)
|
||||
|
||||
### driver_point.proto
|
||||
|
||||
Defines point-related RPC calls for driver services.
|
||||
|
||||
**Service**: `PointApi`
|
||||
|
||||
- `ListByPage` - Query points with pagination support
|
||||
- `GetById` - Query point by point ID
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPagePointQuery` - Paginated point query request
|
||||
- `GrpcPointQuery` - Single point query request
|
||||
- `GrpcRPagePointDTO` - Paginated point list response
|
||||
- `GrpcRPointDTO` - Single point response
|
||||
|
||||
### driver_entity.proto
|
||||
|
||||
Defines driver entity structures used during registration.
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcDriverRegisterDTO` - Complete driver registration information including:
|
||||
- Tenant identification
|
||||
- Driver client name (service instance identifier)
|
||||
- Driver metadata (GrpcDriverDTO)
|
||||
- Driver attribute definitions
|
||||
- Point attribute definitions
|
||||
|
||||
### driver_query.proto
|
||||
|
||||
Defines query structures for driver services.
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcDriverQuery` - Driver query by driver_id
|
||||
- `GrpcDeviceQuery` - Device query by driver_id and device_id
|
||||
- `GrpcPointQuery` - Point query by driver_id and point_id
|
||||
|
||||
### driver_query_page.proto
|
||||
|
||||
Defines paginated query structures for driver services.
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPageDeviceQuery` - Paginated device query with filters (tenant, driver, device)
|
||||
- `GrpcPagePointQuery` - Paginated point query with filters (tenant, driver, device, profile)
|
||||
|
||||
## Dependencies
|
||||
|
||||
This module depends on common proto definitions:
|
||||
|
||||
- `api/common/entity.proto` - Common entity definitions (Driver, Device, Point, Attributes)
|
||||
- `api/common/page.proto` - Pagination support
|
||||
- `api/common/r.proto` - Common response wrapper
|
||||
|
||||
## Usage
|
||||
|
||||
### 1. Add Dependency
|
||||
|
||||
```xml
|
||||
|
||||
<dependency>
|
||||
<groupId>io.github.pnoker</groupId>
|
||||
<artifactId>dc3-api-driver</artifactId>
|
||||
<version>2026.5.22</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 2. Driver Registration Flow
|
||||
|
||||
```protobuf
|
||||
// 1. Driver builds registration request
|
||||
GrpcDriverRegisterDTO registerRequest = GrpcDriverRegisterDTO.newBuilder()
|
||||
.setTenant("default")
|
||||
.setClient("modbus-tcp-driver-001")
|
||||
.setDriver(driverInfo)
|
||||
.addAllDriverAttributes(driverAttributes)
|
||||
.addAllPointAttributes(pointAttributes)
|
||||
.build();
|
||||
|
||||
// 2. Call registration service
|
||||
GrpcRDriverRegisterDTO response = driverApi.driverRegister(registerRequest);
|
||||
|
||||
// 3. Extract configuration from response
|
||||
GrpcDriverDTO driver = response.getDriver();
|
||||
List<Long> deviceIds = response.getDeviceIdsList();
|
||||
List<GrpcDriverAttributeDTO> driverAttrs = response.getDriverAttributesList();
|
||||
List<GrpcPointAttributeDTO> pointAttrs = response.getPointAttributesList();
|
||||
|
||||
// 4. Load device configurations
|
||||
for (Long deviceId : deviceIds) {
|
||||
GrpcDeviceQuery query = GrpcDeviceQuery.newBuilder()
|
||||
.setDriverId(driver.getId())
|
||||
.setDeviceId(deviceId)
|
||||
.build();
|
||||
GrpcRDeviceDTO deviceResponse = deviceApi.getById(query);
|
||||
// Process device configuration
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Query Device Configuration
|
||||
## Response handling example
|
||||
|
||||
```java
|
||||
// Query device with full configuration
|
||||
GrpcRDeviceAttachDTO deviceAttach = deviceApi.getById(deviceQuery);
|
||||
|
||||
// Extract device information
|
||||
GrpcDeviceDTO device = deviceAttach.getDevice();
|
||||
List<Long> pointIds = deviceAttach.getPointIdsList();
|
||||
List<GrpcDriverAttributeConfigDTO> driverConfigs = deviceAttach.getDriverConfigsList();
|
||||
List<GrpcPointAttributeConfigDTO> pointConfigs = deviceAttach.getPointConfigsList();
|
||||
|
||||
// Initialize device connection
|
||||
initializeDevice(device, driverConfigs, pointConfigs);
|
||||
```
|
||||
|
||||
### 4. Query Point Configuration
|
||||
|
||||
```java
|
||||
// Query point by ID
|
||||
GrpcPointQuery pointQuery = GrpcPointQuery.newBuilder()
|
||||
.setDriverId(driverId)
|
||||
.setPointId(pointId)
|
||||
.build();
|
||||
|
||||
GrpcRPointDTO pointResponse = pointApi.getById(pointQuery);
|
||||
GrpcPointDTO point = pointResponse.getData();
|
||||
|
||||
// Configure point reading
|
||||
configurePoint(point);
|
||||
```
|
||||
|
||||
## Driver Service Lifecycle
|
||||
|
||||
### 1. Startup Phase
|
||||
|
||||
```
|
||||
Driver Service Start
|
||||
↓
|
||||
Build GrpcDriverRegisterDTO
|
||||
↓
|
||||
Call DriverApi.driverRegister()
|
||||
↓
|
||||
Receive Driver Configuration
|
||||
↓
|
||||
Load Device Configurations
|
||||
↓
|
||||
Load Point Configurations
|
||||
↓
|
||||
Initialize Device Connections
|
||||
↓
|
||||
Ready for Data Collection
|
||||
```
|
||||
|
||||
### 2. Runtime Phase
|
||||
|
||||
```
|
||||
Periodic Data Collection
|
||||
↓
|
||||
Read Point Values from Device
|
||||
↓
|
||||
Convert and Format Values
|
||||
↓
|
||||
Send to Data Center
|
||||
↓
|
||||
Repeat
|
||||
```
|
||||
|
||||
### 3. Shutdown Phase
|
||||
|
||||
```
|
||||
Driver Service Stop
|
||||
↓
|
||||
Close Device Connections
|
||||
↓
|
||||
Unregister from Manager
|
||||
↓
|
||||
Cleanup Resources
|
||||
```
|
||||
|
||||
## Data Models
|
||||
|
||||
### Driver Metadata (GrpcDriverDTO)
|
||||
|
||||
- **driver_name**: Display name
|
||||
- **driver_code**: Unique identifier
|
||||
- **service_name**: Driver service type
|
||||
- **service_host**: Deployment location
|
||||
- **driver_type_flag**: Driver type (e.g., virtual, modbus, opc-ua)
|
||||
- **driver_ext**: Extended configuration (JSON)
|
||||
- **enable_flag**: Active status
|
||||
- **signature**: Driver signature for validation
|
||||
- **version**: Configuration version
|
||||
|
||||
### Device Metadata (GrpcDeviceDTO)
|
||||
|
||||
- **device_name**: Display name
|
||||
- **device_code**: Unique identifier
|
||||
- **driver_id**: Associated driver
|
||||
- **device_ext**: Extended configuration (JSON)
|
||||
- **enable_flag**: Active status
|
||||
- **signature**: Device signature
|
||||
- **version**: Configuration version
|
||||
|
||||
### Point Metadata (GrpcPointDTO)
|
||||
|
||||
- **point_name**: Display name
|
||||
- **point_code**: Unique identifier
|
||||
- **point_type_flag**: Data type (digital, analog, string)
|
||||
- **rw_flag**: Read/write permission
|
||||
- **base_value**: Base value for conversion
|
||||
- **multiple**: Scale factor
|
||||
- **value_decimal**: Precision
|
||||
- **unit**: Measurement unit
|
||||
- **profile_id**: Associated profile template
|
||||
|
||||
### Attribute Configuration
|
||||
|
||||
Drivers and points can have configurable attributes:
|
||||
|
||||
- **Driver Attributes**: Driver-level configuration (e.g., connection settings)
|
||||
- **Point Attributes**: Point-level configuration (e.g., register address)
|
||||
|
||||
Attributes support:
|
||||
|
||||
- Type specification (string, number, boolean)
|
||||
- Default values
|
||||
- Per-device configuration overrides
|
||||
- Dynamic configuration updates
|
||||
|
||||
## API Features
|
||||
|
||||
### Multi-Tenancy Support
|
||||
|
||||
- Tenant-scoped driver registration
|
||||
- Tenant-isolated device and point queries
|
||||
- Cross-tenant operation prevention
|
||||
|
||||
### Configuration Synchronization
|
||||
|
||||
- Automatic configuration distribution on registration
|
||||
- Version-based configuration updates
|
||||
- Signature-based change detection
|
||||
|
||||
### Extensibility
|
||||
|
||||
- Custom driver types via driver_type_flag
|
||||
- Extended configuration via *_ext fields
|
||||
- Custom attribute definitions
|
||||
|
||||
### Query Optimization
|
||||
|
||||
- Pagination support for large device/point lists
|
||||
- Driver-scoped queries for performance
|
||||
- Profile-based filtering for template queries
|
||||
|
||||
## Integration Points
|
||||
|
||||
### Driver Implementation
|
||||
|
||||
```java
|
||||
// Driver service implements DriverApi for registration
|
||||
public class ModbusTcpDriverService {
|
||||
private final DriverApiGrpc.DriverApiBlockingStub driverApi;
|
||||
private final DeviceApiGrpc.DeviceApiBlockingStub deviceApi;
|
||||
private final PointApiGrpc.PointApiBlockingStub pointApi;
|
||||
|
||||
public void start() {
|
||||
// Register driver
|
||||
registerDriver();
|
||||
|
||||
// Load configurations
|
||||
loadDeviceConfigurations();
|
||||
|
||||
// Start data collection
|
||||
startDataCollection();
|
||||
}
|
||||
GrpcRDeviceDTO response = deviceApiBlockingStub.getById(deviceQuery);
|
||||
if (!response.getResult().getOk()) {
|
||||
throw new IllegalStateException(response.getResult().getMessage());
|
||||
}
|
||||
GrpcRDeviceAttachDTO attachment = response.getData();
|
||||
GrpcDeviceDTO device = attachment.getDevice();
|
||||
```
|
||||
|
||||
### Manager Service
|
||||
`DeviceApi.GetById` returns `GrpcRDeviceDTO`; `GrpcRDeviceAttachDTO` is its `data` field, not the RPC's top-level return
|
||||
type.
|
||||
|
||||
Manager service implements these APIs to provide:
|
||||
## Implementation
|
||||
|
||||
- Driver registration handling
|
||||
- Device metadata management
|
||||
- Point metadata management
|
||||
- Configuration distribution
|
||||
The Manager Center implements these services. Drivers are clients; they do not implement `DriverApi` themselves.
|
||||
`dc3-common-driver` creates shared stubs through `DriverClientStubConfig` and exposes higher-level clients to driver
|
||||
implementations.
|
||||
|
||||
### Data Collection
|
||||
|
||||
```
|
||||
Driver Device SDK → Read Device → Convert Data → Send to Data Center
|
||||
```
|
||||
|
||||
## Communication Pattern
|
||||
|
||||
### Synchronous Queries
|
||||
|
||||
- Configuration queries (device, point)
|
||||
- Registration operations
|
||||
|
||||
### Asynchronous Events
|
||||
|
||||
- Device connection status updates
|
||||
- Point value changes (via message queue)
|
||||
- Configuration change notifications
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Registration Failures
|
||||
|
||||
- Invalid tenant
|
||||
- Duplicate driver instance
|
||||
- Missing required attributes
|
||||
|
||||
### Query Failures
|
||||
|
||||
- Device not found
|
||||
- Point not found
|
||||
- Permission denied
|
||||
- Driver not registered
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
- **Connection Pooling**: Reuse gRPC channels for manager communication
|
||||
- **Configuration Caching**: Cache device/point configurations locally
|
||||
- **Batch Queries**: Use pagination queries for loading multiple devices/points
|
||||
- **Lazy Loading**: Load device configurations on-demand
|
||||
|
||||
## Build Instructions
|
||||
## Build and Verification
|
||||
|
||||
```bash
|
||||
# Build the module
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
|
||||
# Install to local repository
|
||||
mvn -s ../../.mvn/settings.xml clean install
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-api/dc3-api-driver -am compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-manager` - Manager service API for device/driver/point management
|
||||
- `dc3-api-data` - Data service API for point value storage
|
||||
- `dc3-common-driver` - Driver framework SDK
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
After a contract change, run the matching gRPC server/client tests in `dc3-common-manager` and `dc3-common-driver`.
|
||||
Preserve field numbers and tenant context when evolving registration or query messages.
|
||||
|
||||
@@ -1,186 +1,50 @@
|
||||
# DC3 API Manager
|
||||
|
||||
## Overview
|
||||
`dc3-api-manager` defines Manager Center gRPC contracts for metadata lookups used by distributed facades and other
|
||||
services. Generated Java types use `io.github.pnoker.api.center.manager`.
|
||||
|
||||
`dc3-api-manager` provides gRPC service definitions for the Manager Center in the IoT DC3 platform. It defines the
|
||||
interfaces used by the Data service and other consumers to query driver, device, point, profile, command, and event
|
||||
metadata from the Manager Center.
|
||||
## Services
|
||||
|
||||
## Module Information
|
||||
| Service | Single-result RPCs | Collection/page RPCs |
|
||||
|---|---|---|
|
||||
| `DriverApi` | `GetByDriverId`, `GetByDeviceId` | `ListByPage`, `ListByDriverIds` |
|
||||
| `DeviceApi` | `GetByDeviceId` | `ListByPage`, `ListByProfileId`, `ListByDriverId`, `ListByDeviceIds` |
|
||||
| `PointApi` | `GetById` | `ListByPage`, `ListByIds` |
|
||||
| `ProfileApi` | `GetByProfileId` | `ListByPage`, `ListByProfileIds`, `ListByDeviceId` |
|
||||
| `CommandApi` | `GetById` | `ListByPage`, `ListByIds` |
|
||||
| `EventApi` | `GetById` | `ListByPage`, `ListByIds` |
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-api-manager
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.api.center.manager`
|
||||
Proto sources live under `src/main/protobuf/api/common/manager/`. Shared query and page messages are defined in
|
||||
`manager_query.proto` and `manager_query_page.proto`.
|
||||
|
||||
## Proto Definitions
|
||||
## Usage boundary
|
||||
|
||||
### manager_driver.proto
|
||||
Business services should inject facade interfaces such as `DriverFacade`, `DeviceFacade`, or `PointFacade` from
|
||||
`dc3-common-facade-api`. The distributed implementation in `dc3-common-facade-grpc` owns generated blocking stubs,
|
||||
channel selection, error-envelope handling, and BO conversion.
|
||||
|
||||
Defines driver-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `DriverApi`
|
||||
|
||||
- `ListByPage` - Query drivers with pagination support
|
||||
- `GetByDriverId` - Query driver information by driver ID
|
||||
- `ListByDriverIds` - Query drivers by a list of driver IDs
|
||||
- `GetByDeviceId` - Query driver information by device ID
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPageDriverQuery` - Paginated driver query request
|
||||
- `GrpcDriverQuery` - Driver query by driver ID / device ID
|
||||
- `GrpcDriverIdsQuery` - Driver query by a list of driver IDs
|
||||
- `GrpcRDriverDTO` - Response wrapper containing driver information
|
||||
- `GrpcRPageDriverDTO` / `GrpcRDriverListDTO` - Paginated / list responses
|
||||
- `GrpcDriverDTO` - Driver data structure (service name, driver type, host, etc.)
|
||||
|
||||
### manager_device.proto
|
||||
|
||||
Defines device-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `DeviceApi`
|
||||
|
||||
- `ListByPage` - Query devices with pagination support
|
||||
- `ListByProfileId` - Query devices by profile ID
|
||||
- `ListByDriverId` - Query devices by driver ID
|
||||
- `GetByDeviceId` - Query device information by device ID
|
||||
- `ListByDeviceIds` - Query devices by a list of device IDs
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPageDeviceQuery` - Paginated device query request
|
||||
- `GrpcDeviceQuery` - Single device query
|
||||
- `GrpcDeviceIdsQuery` - Device query by a list of device IDs
|
||||
- `GrpcRDeviceDTO` / `GrpcRPageDeviceDTO` / `GrpcRDeviceListDTO` - Single / paginated / list responses
|
||||
|
||||
### manager_point.proto
|
||||
|
||||
Defines point-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `PointApi`
|
||||
|
||||
- `ListByPage` - Query points with pagination support
|
||||
- `GetById` - Query point information by point ID
|
||||
- `ListByIds` - Query points by a list of point IDs
|
||||
|
||||
**Key Messages**:
|
||||
|
||||
- `GrpcPagePointQuery` - Paginated point query request
|
||||
- `GrpcPointQuery` - Single point query
|
||||
- `GrpcPointIdsQuery` - Point query by a list of point IDs
|
||||
- `GrpcRPointDTO` / `GrpcRPagePointDTO` / `GrpcRPointListDTO` - Single / paginated / list responses
|
||||
|
||||
### manager_command.proto
|
||||
|
||||
Defines command-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `CommandApi`
|
||||
|
||||
- `ListByPage` - Query commands with pagination support
|
||||
- `GetById` - Query command information by command ID
|
||||
- `ListByIds` - Query commands by a list of command IDs
|
||||
|
||||
### manager_event.proto
|
||||
|
||||
Defines event-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `EventApi`
|
||||
|
||||
- `ListByPage` - Query events with pagination support
|
||||
- `GetById` - Query event information by event ID
|
||||
- `ListByIds` - Query events by a list of event IDs
|
||||
|
||||
### manager_profile.proto
|
||||
|
||||
Defines profile-related RPC calls from the manager perspective.
|
||||
|
||||
**Service**: `ProfileApi`
|
||||
|
||||
- `ListByPage` - Query profiles with pagination support
|
||||
- `GetByProfileId` - Query profile information by profile ID
|
||||
- `ListByProfileIds` - Query profiles by a list of profile IDs
|
||||
- `ListByDeviceId` - Query profiles bound to a device
|
||||
|
||||
### manager_query.proto / manager_query_page.proto
|
||||
|
||||
Shared query and paginated query structures for manager RPC calls.
|
||||
|
||||
## Dependencies
|
||||
|
||||
This module depends on common proto definitions:
|
||||
|
||||
- `api/common/entity.proto` - Common entity definitions
|
||||
- `api/common/page.proto` - Pagination support
|
||||
- `api/common/r.proto` - Common response wrapper
|
||||
|
||||
## Usage
|
||||
|
||||
### 1. Add Dependency
|
||||
|
||||
```xml
|
||||
|
||||
<dependency>
|
||||
<groupId>io.github.pnoker</groupId>
|
||||
<artifactId>dc3-api-manager</artifactId>
|
||||
<version>2026.5.22</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
### 2. Inject gRPC Client
|
||||
A transport adapter that needs the generated API calls the current cardinality-matching methods, for example:
|
||||
|
||||
```java
|
||||
|
||||
@GrpcClient(ManagerConstant.SERVICE_NAME)
|
||||
private DriverApiGrpc.DriverApiBlockingStub driverApiBlockingStub;
|
||||
|
||||
@GrpcClient(ManagerConstant.SERVICE_NAME)
|
||||
private PointApiGrpc.PointApiBlockingStub pointApiBlockingStub;
|
||||
```
|
||||
|
||||
### 3. Query Driver by Device
|
||||
|
||||
```java
|
||||
GrpcDeviceQuery query = GrpcDeviceQuery.newBuilder()
|
||||
GrpcDeviceQuery request = GrpcDeviceQuery.newBuilder()
|
||||
.setDeviceId(deviceId)
|
||||
.setTenantId(tenantId)
|
||||
.build();
|
||||
GrpcRDriverDTO response = driverApiBlockingStub.getByDeviceId(query);
|
||||
if(response.
|
||||
|
||||
getResult().
|
||||
|
||||
getOk()){
|
||||
String serviceName = response.getData().getServiceName();
|
||||
}
|
||||
GrpcRDriverDTO response = driverApiBlockingStub.getByDeviceId(request);
|
||||
```
|
||||
|
||||
## Integration Points
|
||||
Do not use removed `SelectXxx` RPC names or ad hoc channel construction in business code.
|
||||
|
||||
- Used by `dc3-common-data` to resolve the target driver service name before publishing RabbitMQ commands
|
||||
- Used by `dc3-common-data` to look up point metadata for data queries
|
||||
## Implementation
|
||||
|
||||
## Build Instructions
|
||||
`dc3-common-manager` implements the services as Spring `@Service` beans extending generated `*ImplBase` classes.
|
||||
`dc3-common-facade-grpc` consumes them through stubs created by `GrpcStubConfig`.
|
||||
|
||||
## Build and Verification
|
||||
|
||||
```bash
|
||||
# Build the module (run from repo root)
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
|
||||
# Install to local repository
|
||||
mvn -s .mvn/settings.xml clean install
|
||||
|
||||
# Build this module only
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-api/dc3-api-manager -am compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-driver` - Driver-side gRPC API for driver registration and config sync
|
||||
- `dc3-common-data` - Consumes this API to resolve driver/point metadata
|
||||
- `dc3-common-manager` - Implements this API as `@GrpcService` server
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
After proto changes, run the Manager gRPC server tests and facade contract tests. Verify tenant propagation and update
|
||||
the corresponding server, builder, facade, and caller in the same change.
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# DC3 Center
|
||||
|
||||
`dc3-center` contains the deployable backend applications. Most business logic lives in matching `dc3-common-*`
|
||||
modules; center modules assemble dependencies, configuration, and process boundaries.
|
||||
|
||||
## Applications
|
||||
|
||||
| Module | HTTP | gRPC | Base path | Purpose |
|
||||
|---|---:|---:|---|---|
|
||||
| `dc3-center-single` | 8100 | 9100 | `/single` | auth, manager, and data in one JVM |
|
||||
| `dc3-center-auth` | 8300 | 9300 | `/auth` | identity, authorization, OAuth2, and MCP authorization |
|
||||
| `dc3-center-manager` | 8400 | 9400 | `/manager` | device and metadata management |
|
||||
| `dc3-center-data` | 8500 | 9500 | `/data` | values, commands, events, and status |
|
||||
| `dc3-center-agentic` | 8600 | n/a | `/agentic` | AI-assisted operations |
|
||||
|
||||
Ports are defaults; environment variables in each `application.yml` are authoritative. The distributed applications use
|
||||
static, environment-overridable gRPC addresses. They do not depend on Nacos service discovery.
|
||||
|
||||
## Run locally
|
||||
|
||||
From the repository root:
|
||||
|
||||
```bash
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
To run source processes instead, start one command per terminal:
|
||||
|
||||
```bash
|
||||
make run SERVICE=auth
|
||||
make run SERVICE=manager
|
||||
make run SERVICE=data
|
||||
make run SERVICE=agentic
|
||||
```
|
||||
|
||||
Run the all-in-one process directly because the root Makefile does not define a `single` service alias:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-single -am spring-boot:run
|
||||
```
|
||||
|
||||
Start the gateway separately when testing public HTTP routes.
|
||||
|
||||
## Verification
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -f dc3-center/pom.xml -DskipTests compile
|
||||
mvn -s .mvn/settings.xml -f dc3-center/pom.xml test
|
||||
```
|
||||
|
||||
For runtime configuration, read the affected module's `application.yml` plus its active profile file. Do not duplicate
|
||||
profile-specific host or port values in new documentation.
|
||||
@@ -11,7 +11,6 @@ shell; the agentic logic lives in `dc3-common-agentic`.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-center-agentic
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.center.agentic`
|
||||
|
||||
## Service Ports
|
||||
@@ -44,25 +43,30 @@ The WebFlux base path is `/agentic`; through the gateway the service is reached
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev SERVICES="auth manager data"
|
||||
```
|
||||
|
||||
The agentic service has gRPC facade channels for Auth, Manager, and Data centers. Start all three before exercising
|
||||
platform tools; the gateway is optional when calling the agentic service directly.
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-agentic -am package
|
||||
java -jar dc3-center/dc3-center-agentic/target/dc3-center-agentic.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-agentic -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-agentic` — agentic SDK: Spring AI chat client, platform tools, conversation memory, model management
|
||||
- `dc3-common-facade-grpc` — gRPC facade for cross-service access
|
||||
- `dc3-common-resource-registrar` — registers this service's API / menu resources
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,15 +10,14 @@ control.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-center-auth
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.center.auth`
|
||||
|
||||
## Service Ports
|
||||
|
||||
| Protocol | Port |
|
||||
|-----------|------------------------------------------------------|
|
||||
| HTTP REST | `8300` (default, overridable via `SERVER_PORT`) |
|
||||
| gRPC | `9300` (default, overridable via `GRPC_SERVER_PORT`) |
|
||||
| Protocol | Port | Configuration variable |
|
||||
|-----------|--------|------------------------|
|
||||
| HTTP REST | `8300` | `DC3_AUTH_PORT` |
|
||||
| gRPC | `9300` | `DC3_AUTH_GRPC_PORT` |
|
||||
|
||||
## Key Responsibilities
|
||||
|
||||
@@ -26,8 +25,8 @@ control.
|
||||
- **Tenant Management**: Multi-tenant registration, lookup by tenant code
|
||||
- **User Authentication**: Local credential validation with server-side password hashing
|
||||
- **Dictionary Services**: Provide lookup dictionaries for auth-scoped data
|
||||
- **gRPC Server**: Exposes `TenantApi`, `UserApi`, `LocalCredentialApi`, `TokenApi` for inter-service consumption (e.g.,
|
||||
Gateway)
|
||||
- **gRPC Server**: Exposes tenant, user, credential, token, permission, resource-registry, and MCP-runtime APIs for
|
||||
facade-backed inter-service consumption
|
||||
|
||||
## REST Endpoints (via Gateway)
|
||||
|
||||
@@ -56,21 +55,21 @@ This service wires `dc3-common-auth` which contains all business logic controlle
|
||||
|
||||
- `application.yml` — base port and profile config
|
||||
- `application-dev.yml` — dev env: Postgres connection via `${ENV:default}` vars
|
||||
- `application-pre.yml` — pre-release: Nacos-based service discovery
|
||||
- `application-pro.yml` — production: Nacos-based service discovery
|
||||
- `application-pre.yml` — pre-release datasource and runtime overrides
|
||||
- `application-pro.yml` — production datasource and runtime overrides
|
||||
|
||||
## Running Locally
|
||||
|
||||
### 1. Start Infrastructure
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
### 2. Build
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-auth -am package
|
||||
```
|
||||
|
||||
### 3. Run
|
||||
@@ -79,14 +78,16 @@ mvn -s .mvn/settings.xml clean package
|
||||
java -jar dc3-center/dc3-center-auth/target/dc3-center-auth.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-auth -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-auth` - gRPC API contracts for auth service
|
||||
- `dc3-common-auth` - Business logic implementation
|
||||
- `dc3-gateway` - Consumes token validation via gRPC
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,24 +10,24 @@ exposing data query APIs.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-center-data
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.center.data`
|
||||
|
||||
## Service Ports
|
||||
|
||||
| Protocol | Port |
|
||||
|-----------|------------------------------------------------------|
|
||||
| HTTP REST | `8500` (default, overridable via `SERVER_PORT`) |
|
||||
| gRPC | `9500` (default, overridable via `GRPC_SERVER_PORT`) |
|
||||
| Protocol | Port | Configuration variable |
|
||||
|-----------|--------|------------------------|
|
||||
| HTTP REST | `8500` | `DC3_DATA_PORT` |
|
||||
| gRPC | `9500` | `DC3_DATA_GRPC_PORT` |
|
||||
|
||||
## Key Responsibilities
|
||||
|
||||
- **Point Value Ingestion**: Receives point values from drivers via RabbitMQ (`dc3.e.value` exchange,
|
||||
`dc3.q.value.point` queue) and persists them to the time-series storage
|
||||
- **Point Value Query**: Exposes REST and gRPC APIs to query the latest and historical point values
|
||||
- **Device Command Dispatch**: Receives read/write commands, resolves the target driver via Manager gRPC (
|
||||
`ManagerConstant.SERVICE_NAME`), and publishes to `dc3.e.command`
|
||||
- **Driver Status**: Tracks driver online/offline status events
|
||||
- **Point Command Dispatch**: Resolves the target driver through `DriverFacade` and publishes point read/write commands
|
||||
to `dc3.e.point_command`
|
||||
- **Custom Command Dispatch**: Publishes custom device commands to `dc3.e.command`
|
||||
- **Driver and Device Status**: Tracks state, timeout, and alarm events
|
||||
- **Data Query**: Supports pagination query, real-time telemetry, and historical data retrieval
|
||||
|
||||
## REST Endpoints (via Gateway)
|
||||
@@ -36,11 +36,13 @@ Accessible through the gateway at `/api/v3/data/**` (authentication required).
|
||||
|
||||
## Messaging Topics
|
||||
|
||||
| Exchange | Direction | Purpose |
|
||||
|-----------------|-----------|-----------------------------------------|
|
||||
| `dc3.e.value` | Inbound | Receive point values from drivers |
|
||||
| `dc3.e.command` | Outbound | Dispatch read/write commands to drivers |
|
||||
| `dc3.e.event` | Inbound | Receive driver/device status events |
|
||||
| Exchange | Direction | Purpose |
|
||||
|-----------------------|-----------|-----------------------------------------|
|
||||
| `dc3.e.value` | Inbound | Receive point values from drivers |
|
||||
| `dc3.e.point_command` | Outbound | Dispatch point read/write commands |
|
||||
| `dc3.e.command` | Outbound | Dispatch custom device commands |
|
||||
| `dc3.e.state` | Inbound | Receive driver/device state events |
|
||||
| `dc3.e.event` | Inbound | Receive reported domain events |
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -58,21 +60,21 @@ This service wires `dc3-common-data` which contains all business logic.
|
||||
|
||||
- `application.yml` — base port and profile config
|
||||
- `application-dev.yml` — dev env: Postgres, RabbitMQ, gRPC client addresses
|
||||
- `application-pre.yml` — pre-release: Nacos-based service discovery
|
||||
- `application-pro.yml` — production: Nacos-based service discovery
|
||||
- `application-pre.yml` — pre-release datasource, messaging, and static gRPC client addresses
|
||||
- `application-pro.yml` — production datasource, messaging, and static gRPC client addresses
|
||||
|
||||
## Running Locally
|
||||
|
||||
### 1. Start Infrastructure
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
### 2. Build
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-data -am package
|
||||
```
|
||||
|
||||
### 3. Run (after auth and manager are up)
|
||||
@@ -81,15 +83,17 @@ mvn -s .mvn/settings.xml clean package
|
||||
java -jar dc3-center/dc3-center-data/target/dc3-center-data.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-data -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-data` - gRPC API contracts for point value queries
|
||||
- `dc3-api-manager` - gRPC API for resolving driver/point metadata
|
||||
- `dc3-common-data` - Business logic implementation
|
||||
- `dc3-common-repository` - Pluggable time-series storage adapter
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,15 +10,14 @@ management, and command interfaces.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-center-manager
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.center.manager`
|
||||
|
||||
## Service Ports
|
||||
|
||||
| Protocol | Port |
|
||||
|-----------|------------------------------------------------------|
|
||||
| HTTP REST | `8400` (default, overridable via `SERVER_PORT`) |
|
||||
| gRPC | `9400` (default, overridable via `GRPC_SERVER_PORT`) |
|
||||
| Protocol | Port | Configuration variable |
|
||||
|-----------|--------|------------------------|
|
||||
| HTTP REST | `8400` | `DC3_MANAGER_PORT` |
|
||||
| gRPC | `9400` | `DC3_MANAGER_GRPC_PORT` |
|
||||
|
||||
## Key Responsibilities
|
||||
|
||||
@@ -49,12 +48,12 @@ Key endpoint prefixes (defined in `ManagerConstant`):
|
||||
|
||||
## gRPC Services (consumed by drivers and data service)
|
||||
|
||||
| Service | Used By |
|
||||
|------------------------------|----------------------------------|
|
||||
| `DriverApi.driverRegister` | Drivers on startup |
|
||||
| `DeviceApi.selectById` | Drivers fetching device config |
|
||||
| `PointApi.selectById` | Drivers and data service |
|
||||
| `DriverApi.selectByDeviceId` | Data service for command routing |
|
||||
| Service | Used by |
|
||||
|----------------------------|-------------------------------------------------|
|
||||
| `DriverApi.DriverRegister` | Drivers registering on startup |
|
||||
| `DeviceApi.GetById` | Drivers fetching device configuration |
|
||||
| `PointApi.GetById` | Drivers fetching point configuration |
|
||||
| `DriverApi.GetByDeviceId` | Distributed facades resolving command routing |
|
||||
|
||||
## Dependencies
|
||||
|
||||
@@ -72,21 +71,21 @@ This service wires `dc3-common-manager` which contains all business logic.
|
||||
|
||||
- `application.yml` — base port and profile config
|
||||
- `application-dev.yml` — dev env: Postgres, RabbitMQ, gRPC client addresses
|
||||
- `application-pre.yml` — pre-release: Nacos-based service discovery
|
||||
- `application-pro.yml` — production: Nacos-based service discovery
|
||||
- `application-pre.yml` — pre-release datasource, messaging, and static gRPC client addresses
|
||||
- `application-pro.yml` — production datasource, messaging, and static gRPC client addresses
|
||||
|
||||
## Running Locally
|
||||
|
||||
### 1. Start Infrastructure
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
### 2. Build
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-manager -am package
|
||||
```
|
||||
|
||||
### 3. Run (after auth is up)
|
||||
@@ -95,14 +94,16 @@ mvn -s .mvn/settings.xml clean package
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-manager -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-driver` - Driver-side gRPC API implemented by this service
|
||||
- `dc3-api-manager` - Manager-side gRPC API implemented by this service
|
||||
- `dc3-common-manager` - Business logic implementation
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,15 +9,14 @@ management services into a single deployable module for simplified single-node o
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-center-single
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.center.single`
|
||||
|
||||
## Service Ports
|
||||
|
||||
| Protocol | Port |
|
||||
|-----------|------------------------------------------------------|
|
||||
| HTTP REST | `8100` (default, overridable via `SERVER_PORT`) |
|
||||
| gRPC | `9100` (default, overridable via `GRPC_SERVER_PORT`) |
|
||||
| Protocol | Port | Configuration variable |
|
||||
|-----------|--------|------------------------|
|
||||
| HTTP REST | `8100` | `DC3_SINGLE_PORT` |
|
||||
| gRPC | `9100` | `DC3_SINGLE_GRPC_PORT` |
|
||||
|
||||
## Key Responsibilities
|
||||
|
||||
@@ -57,7 +56,7 @@ Wires all three common service modules:
|
||||
|
||||
- `application.yml` — base port and profile config
|
||||
- `application-dev.yml` — dev env: single Postgres/RabbitMQ config
|
||||
- `application-pre.yml` — pre-release: Nacos-based service discovery
|
||||
- `application-pre.yml` — pre-release runtime overrides for the all-in-one process
|
||||
- `application-pro.yml` — production target config
|
||||
|
||||
## Running Locally
|
||||
@@ -65,13 +64,13 @@ Wires all three common service modules:
|
||||
### 1. Start Infrastructure
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
### 2. Build
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-single -am package
|
||||
```
|
||||
|
||||
### 3. Run
|
||||
@@ -80,15 +79,17 @@ mvn -s .mvn/settings.xml clean package
|
||||
java -jar dc3-center/dc3-center-single/target/dc3-center-single.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-center/dc3-center-single -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-center-auth` — Standalone auth service
|
||||
- `dc3-center-data` — Standalone data service
|
||||
- `dc3-center-manager` — Standalone manager service
|
||||
- `dc3-common-auth` / `dc3-common-data` / `dc3-common-manager` — Shared business logic
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
# DC3 Common
|
||||
|
||||
`dc3-common` contains reusable backend libraries and the shared business implementations assembled by the deployable
|
||||
center and driver applications.
|
||||
|
||||
## Domain modules
|
||||
|
||||
| Module | Responsibility |
|
||||
|---|---|
|
||||
| `dc3-common-auth` | authentication, authorization, identity, OAuth2, and auth gRPC servers |
|
||||
| `dc3-common-manager` | driver/device/profile/point metadata and manager APIs |
|
||||
| `dc3-common-data` | values, commands, events, status, and data APIs |
|
||||
| `dc3-common-agentic` | AI models, sessions, tools, and assisted operations |
|
||||
| `dc3-common-driver` | driver SDK, registration, scheduling, metadata, command, and value runtime |
|
||||
| `dc3-common-gateway` | gateway routes, authentication filter, and ingress support |
|
||||
|
||||
## Contracts and models
|
||||
|
||||
| Module | Responsibility |
|
||||
|---|---|
|
||||
| `dc3-common-model` | shared BO/VO/DTO bases, builders, extension models, validation groups, and domain enums |
|
||||
| `dc3-common-public` | response envelope, `BaseService`, shared entities/utilities, and tenant markers |
|
||||
| `dc3-common-api` | shared gRPC conversion helpers |
|
||||
| `dc3-common-facade` | cross-service facade contracts and implementations |
|
||||
| `dc3-common-constant` | stable shared constants |
|
||||
| `dc3-common-exception` | shared exception hierarchy |
|
||||
|
||||
## Infrastructure modules
|
||||
|
||||
| Module | Responsibility |
|
||||
|---|---|
|
||||
| `dc3-common-dal` | shared label/group persistence |
|
||||
| `dc3-common-postgres` | datasource and MyBatis-Plus configuration |
|
||||
| `dc3-common-repository` | point-value storage abstraction |
|
||||
| `dc3-common-rabbitmq` | shared exchanges, connection configuration, and message conversion |
|
||||
| `dc3-common-mqtt` | MQTT client configuration |
|
||||
| `dc3-common-quartz` | scheduling infrastructure |
|
||||
| `dc3-common-thread` | managed executors |
|
||||
| `dc3-common-web` | WebFlux, springdoc, security, and controller support |
|
||||
| `dc3-common-log` | logging defaults |
|
||||
| `dc3-common-sql` | SQL utilities |
|
||||
| `dc3-common-resource-registrar` | API/resource annotation discovery and synchronization |
|
||||
| `dc3-common-test` | shared tests, harnesses, and Testcontainers |
|
||||
|
||||
## Architecture rules
|
||||
|
||||
- Preserve `Controller -> Service -> Manager -> Mapper` layering.
|
||||
- Keep tenant scope in queries, cache keys, gRPC calls, and cross-service lookups.
|
||||
- Use BOs in persistent business services and builders for VO/BO/DO conversion.
|
||||
- Use facade interfaces for cross-service business calls.
|
||||
- Add dependencies to the narrowest module that owns the required capability.
|
||||
|
||||
## Verification
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -f dc3-common/pom.xml -DskipTests compile
|
||||
mvn -s .mvn/settings.xml -f dc3-common/pom.xml test
|
||||
```
|
||||
|
||||
Use the child README for module-specific configuration and tests.
|
||||
@@ -10,7 +10,6 @@ model uses to read and operate platform resources.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-agentic
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -37,16 +36,18 @@ model uses to read and operate platform resources.
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-agentic -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-agentic -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-center-agentic` — the service shell that exposes this SDK over HTTP (`/api/v3/agentic/**`)
|
||||
- `dc3-common-facade-*` — facades the platform tools call to reach other services
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,7 +9,6 @@ builder utilities for constructing gRPC request/response objects from domain mod
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-api
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -24,16 +23,18 @@ protobuf classes.
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-api -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module currently has no module-specific automated tests. Verify generated or production sources by compiling the
|
||||
affected reactor from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-common/dc3-common-api -am -DskipTests compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-api-auth` / `dc3-api-data` / `dc3-api-driver` / `dc3-api-manager` — gRPC API contracts that use these utilities
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ functionality. It is wired directly into `dc3-center-auth`.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-auth
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -18,22 +17,36 @@ functionality. It is wired directly into `dc3-center-auth`.
|
||||
|--------------|----------------------------------------------------------------------------|
|
||||
| Controllers | REST controllers for user, tenant, token, dictionary endpoints |
|
||||
| Services | `TokenService`, `UserService`, `TenantService`, `DictionaryForAuthService` |
|
||||
| gRPC Servers | `TenantServer`, `UserServer`, `TokenServer` (`@GrpcService`) |
|
||||
| gRPC Servers | Spring `@Service` beans extending generated `*ImplBase` server classes |
|
||||
| DAL | MyBatis-Plus mappers and DAL managers for auth tables |
|
||||
| Init | `AuthInitRunner` for startup checks |
|
||||
|
||||
## gRPC Services Exposed
|
||||
|
||||
| Service | Consumed By |
|
||||
|-------------|------------------------------|
|
||||
| `TokenApi` | Gateway (`Authentic` filter) |
|
||||
| `TenantApi` | Gateway, other services |
|
||||
| `UserApi` | Gateway, other services |
|
||||
| Service | Purpose |
|
||||
|---|---|
|
||||
| `TokenApi` | Validate login and token material for gateway authentication |
|
||||
| `TenantApi` | Resolve tenant metadata by code |
|
||||
| `UserApi` | Resolve users by ID or principal ID |
|
||||
| `LocalCredentialApi` | Resolve local credentials by login name |
|
||||
| `PermissionApi` | List effective permission codes |
|
||||
| `ResourceRegistryApi` | Synchronize discovered API and menu resources |
|
||||
| `McpRuntimeApi` | Introspect, authorize, resolve, and audit MCP tool calls |
|
||||
|
||||
Distributed callers use the corresponding facade interfaces; they should not construct gRPC channels in business code.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-auth -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-auth -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -41,10 +54,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-center-auth` — Bootstraps this module as a Spring Boot service
|
||||
- `dc3-api-auth` — gRPC contract implemented by this module
|
||||
- `dc3-common-model` — Entity, BO, VO, DTO definitions
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ and common modules.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-constant
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -27,18 +26,22 @@ and common modules.
|
||||
|
||||
`RabbitConstant` defines all exchange names, queue name prefixes, and routing key prefixes:
|
||||
|
||||
| Constant | Value |
|
||||
|----------------------------------|--------------------------|
|
||||
| `TOPIC_EXCHANGE_COMMAND` | `dc3.e.command` |
|
||||
| `TOPIC_EXCHANGE_METADATA` | `dc3.e.metadata` |
|
||||
| `TOPIC_EXCHANGE_VALUE` | `dc3.e.value` |
|
||||
| `TOPIC_EXCHANGE_EVENT` | `dc3.e.event` |
|
||||
| `ROUTING_DEVICE_COMMAND_PREFIX` | `dc3.r.command.device.` |
|
||||
| `ROUTING_DRIVER_METADATA_PREFIX` | `dc3.r.metadata.driver.` |
|
||||
| `ROUTING_POINT_VALUE_PREFIX` | `dc3.r.value.point.` |
|
||||
| Constant | Base value |
|
||||
|----------------------------------|--------------------------------|
|
||||
| `TOPIC_EXCHANGE_POINT_COMMAND` | `dc3.e.point_command` |
|
||||
| `TOPIC_EXCHANGE_COMMAND` | `dc3.e.command` |
|
||||
| `TOPIC_EXCHANGE_METADATA` | `dc3.e.metadata` |
|
||||
| `TOPIC_EXCHANGE_VALUE` | `dc3.e.value` |
|
||||
| `TOPIC_EXCHANGE_EVENT` | `dc3.e.event` |
|
||||
| `ROUTING_POINT_COMMAND_PREFIX` | `dc3.r.point_command.` |
|
||||
| `ROUTING_COMMAND_PREFIX` | `dc3.r.command.` |
|
||||
| `ROUTING_DRIVER_METADATA_PREFIX` | `dc3.r.metadata.driver.` |
|
||||
| `ROUTING_POINT_VALUE_PREFIX` | `dc3.r.value.point.` |
|
||||
|
||||
> **Important**: RabbitMQ routing keys are suffixed with the driver's service name. These constants must not be renamed
|
||||
> without updating all consumers.
|
||||
The runtime may prepend the `dc3.rabbit.tag` system-property value to exchange, queue, and selected routing constants.
|
||||
Point read/write operations use the point-command constants; `TOPIC_EXCHANGE_COMMAND` is reserved for custom commands.
|
||||
Routing keys are suffixed with the driver's service name. Do not rename them without updating every producer, binding,
|
||||
consumer, and deployed queue migration.
|
||||
|
||||
### Common Constants
|
||||
|
||||
@@ -53,26 +56,29 @@ and common modules.
|
||||
|
||||
Located in `io.github.pnoker.common.enums`:
|
||||
|
||||
- `EnableFlagEnum` — Entity enable/disable status
|
||||
- `DriverStatusEnum` — Driver online/offline/fault states
|
||||
- `DriverTypeFlagEnum` — Driver protocol type classification
|
||||
- `PointTypeFlagEnum` — Point value type (int, float, bool, string, etc.)
|
||||
- `MetadataOperateTypeEnum` — Metadata operation (add/update/delete)
|
||||
- `DeviceCommandTypeEnum` — Device command type (READ/WRITE)
|
||||
- And many others (`AttributeTypeFlagEnum`, `ProfileShareFlagEnum`, etc.)
|
||||
- `EnableFlagEnum` — Boolean-like enable/disable state
|
||||
- `EntityStatusEnum` — Online, offline, maintenance, and fault states
|
||||
- `DriverTypeEnum` — Driver client/server, gateway, and connection classifications
|
||||
- `PointTypeEnum` — Point value types such as string, numeric, and boolean
|
||||
- `MetadataOperateTypeEnum` — Metadata add/delete/update operations
|
||||
- `PointCommandTypeEnum` — Point read, batch-read, write, batch-write, and configuration commands
|
||||
- `AttributeTypeEnum` — Attribute value types
|
||||
- `ProfileShareTypeEnum` — Tenant-, driver-, and user-scoped profile sharing
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-constant -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-constant -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
Used as a dependency by virtually all other `dc3-common-*` and `dc3-center-*` modules.
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,7 +9,6 @@ manager implementations, and shared data structures used across multiple service
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-dal
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -20,7 +19,16 @@ manager implementations, and shared data structures used across multiple service
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-dal -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module currently has no module-specific automated tests. Verify generated or production sources by compiling the
|
||||
affected reactor from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-common/dc3-common-dal -am -DskipTests compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -28,10 +36,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-common-postgres` — PostgreSQL and MyBatis-Plus base configuration
|
||||
- `dc3-common-model` — Base BO/VO/DTO model definitions
|
||||
- `dc3-common-manager` / `dc3-common-auth` / `dc3-common-data` — Consumers of this DAL layer
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,40 +10,54 @@ into `dc3-center-data`.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-data
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
| Layer | Contents |
|
||||
|--------------|------------------------------------------------------------------------------------------|
|
||||
| Controllers | REST controllers for point value read/write, query, status |
|
||||
| Services | `PointCommandService`, `PointValueService`, `DriverStatusService`, `DeviceStatusService` |
|
||||
| gRPC Clients | `@GrpcClient(ManagerConstant.SERVICE_NAME)` stubs for `DriverApi`, `PointApi` |
|
||||
| RabbitMQ | Producer for `dc3.e.command`; Consumer for `dc3.e.value`, `dc3.e.event` |
|
||||
| Init | `DataInitRunner` for startup preparation |
|
||||
| Layer | Contents |
|
||||
|--------------|---------------------------------------------------------------------------------------------------|
|
||||
| Controllers | REST controllers for point values, point/custom commands, events, status, and health |
|
||||
| Services | Point value, point command, command history, event history, driver status, and device status |
|
||||
| Facades | `DriverFacade`, `PointFacade`, and related transport-independent cross-service APIs |
|
||||
| RabbitMQ | Point/custom-command producers plus value, state, alarm, event, and result consumers |
|
||||
| Init | `DataInitRunner` for startup preparation |
|
||||
|
||||
## Command Dispatch Flow
|
||||
|
||||
```
|
||||
REST /api/v3/data/point_value/read
|
||||
→ PointCommandServiceImpl
|
||||
→ gRPC: driverApiBlockingStub.selectByDeviceId()
|
||||
→ RabbitMQ: dc3.e.command / dc3.r.command.device.{serviceName}
|
||||
→ DriverFacade.getByDeviceId(tenantId, deviceId)
|
||||
→ RabbitMQ: dc3.e.point_command / dc3.r.point_command.{serviceName}
|
||||
→ Driver receives and acts
|
||||
```
|
||||
|
||||
Custom device commands follow the parallel `dc3.e.command` / `dc3.r.command.{serviceName}` route through
|
||||
`CommandHistoryServiceImpl`.
|
||||
|
||||
## MQ Topics
|
||||
|
||||
| Exchange | Queue | Direction |
|
||||
|-----------------|---------------------------------------------|-------------------------|
|
||||
| `dc3.e.value` | `dc3.q.value.point` | Inbound (from drivers) |
|
||||
| `dc3.e.command` | `dc3.q.command.device.{service}` | Outbound (to drivers) |
|
||||
| `dc3.e.event` | `dc3.q.event.driver` / `dc3.q.event.device` | Inbound (status events) |
|
||||
| Exchange | Queue or routing key | Direction |
|
||||
|-----------------------|-------------------------------------|-----------------------------|
|
||||
| `dc3.e.value` | `dc3.q.value.point` | Inbound point values |
|
||||
| `dc3.e.point_command` | `dc3.r.point_command.{service}` | Outbound point read/write |
|
||||
| `dc3.e.command` | `dc3.r.command.{service}` | Outbound custom commands |
|
||||
| `dc3.e.state` | `dc3.q.state.driver` / `dc3.q.state.device` | Inbound driver/device state |
|
||||
| `dc3.e.event` | `dc3.q.event.report` | Inbound reported events |
|
||||
|
||||
The optional `dc3.rabbit.tag` system property prefixes runtime names; `RabbitConstant` remains authoritative.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-data -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-data -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -52,10 +66,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-api-manager` — gRPC API consumed by this module for driver/point resolution
|
||||
- `dc3-common-repository` — Storage adapter for persisting point values
|
||||
- `dc3-common-rabbitmq` — RabbitMQ exchange/queue configuration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ scheduled data collection.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-driver
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -28,24 +27,37 @@ scheduled data collection.
|
||||
```
|
||||
Driver startup
|
||||
→ DriverInitRunner
|
||||
→ gRPC: dc3-center-manager / DriverApi.driverRegister()
|
||||
→ gRPC: dc3-center-manager / DriverApi.DriverRegister
|
||||
← Returns: driver ID, driver attributes, point attributes, device IDs
|
||||
→ Subscribe to metadata queue: dc3.q.metadata.driver.{serviceName}
|
||||
→ Subscribe to command queue: dc3.q.command.driver.{serviceName}
|
||||
→ Subscribe to point-command queue: dc3.q.point_command.{serviceName}
|
||||
→ Subscribe to custom-command queue: dc3.q.command.{serviceName}
|
||||
```
|
||||
|
||||
## RabbitMQ Integration
|
||||
|
||||
| Exchange | Queue | Purpose |
|
||||
|------------------|-----------------------------------|-------------------------------------|
|
||||
| `dc3.e.metadata` | `dc3.q.metadata.driver.{service}` | Receive config change events |
|
||||
| `dc3.e.command` | `dc3.q.command.driver.{service}` | Receive READ/WRITE commands |
|
||||
| `dc3.e.value` | — | Publish point values to data center |
|
||||
| Exchange | Queue | Purpose |
|
||||
|-----------------------|-------------------------------------|--------------------------------------|
|
||||
| `dc3.e.metadata` | `dc3.q.metadata.driver.{service}` | Receive configuration changes |
|
||||
| `dc3.e.point_command` | `dc3.q.point_command.{service}` | Receive point read/write commands |
|
||||
| `dc3.e.command` | `dc3.q.command.{service}` | Receive custom device commands |
|
||||
| `dc3.e.value` | — | Publish point values to Data Center |
|
||||
|
||||
The optional `dc3.rabbit.tag` system property prefixes runtime names; use `RabbitConstant` and `DriverTopicConfig` as
|
||||
the authoritative definitions.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-driver -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-driver -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -54,10 +66,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-api-driver` — gRPC contracts consumed by this SDK
|
||||
- `dc3-common-rabbitmq` — RabbitMQ exchange configuration
|
||||
- `dc3-common-constant` — `RabbitConstant` routing key prefixes
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ services and modules use these exceptions to signal business errors consistently
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-exception
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -23,13 +22,17 @@ services and modules use these exceptions to signal business errors consistently
|
||||
| `DeleteException` | Entity delete failure |
|
||||
| `NotFoundException` | Entity or resource not found |
|
||||
| `JsonException` | JSON serialization/deserialization error |
|
||||
| `AuthException` | Authentication/authorization failure |
|
||||
| `SecurityException` | General security policy violation |
|
||||
| `UnAuthorizedException` | Missing or invalid authentication |
|
||||
| `AccessDeniedException` | Authenticated principal lacks access |
|
||||
| `DuplicateException` | Duplicate entity conflict |
|
||||
|
||||
### Utilities
|
||||
|
||||
- **`ExceptionUtil`** — Helper methods for wrapping and rethrowing exceptions with context
|
||||
- **`ExceptionConstant`** — Standard exception message strings (e.g., `UTILITY_CLASS`)
|
||||
- **`ExceptionUtil`** — Builds shared service-unavailable messages
|
||||
- **`ExceptionMessageFormatter`** — Internal `{}` placeholder and trailing-cause formatter used by business exceptions
|
||||
|
||||
Shared message constants such as `ExceptionConstant` belong to `dc3-common-constant`.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -41,16 +44,17 @@ throw new AddException("Failed to add driver: " + entityBO.getServiceName());
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-exception -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-exception -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
Used by all `dc3-common-*` service modules and `dc3-center-*` services.
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# DC3 Common Facade
|
||||
|
||||
The facade modules define and implement cross-service business boundaries without binding callers directly to gRPC or
|
||||
in-process service classes.
|
||||
|
||||
## Modules
|
||||
|
||||
| Module | Role |
|
||||
|---|---|
|
||||
| `dc3-common-facade-api` | transport-independent facade interfaces and request/result contracts |
|
||||
| `dc3-common-facade-grpc` | distributed implementations backed by shared gRPC stubs |
|
||||
| `dc3-common-facade-local-auth` | in-process auth facade implementation |
|
||||
| `dc3-common-facade-local-data` | in-process data facade implementation |
|
||||
| `dc3-common-facade-local-manager` | in-process manager facade implementation |
|
||||
| `dc3-common-facade-local` | convenience POM aggregating all local implementations |
|
||||
|
||||
## Selection
|
||||
|
||||
- Distributed center applications normally use `dc3-common-facade-grpc`.
|
||||
- Single-process applications use the required domain-specific local modules.
|
||||
- Depend on `dc3-common-facade-local` only when the application intentionally needs every local facade.
|
||||
- Business code imports interfaces from `dc3-common-facade-api`; transport selection belongs in assembly/configuration.
|
||||
|
||||
## Verification
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -f dc3-common/dc3-common-facade/pom.xml -DskipTests compile
|
||||
mvn -s .mvn/settings.xml -f dc3-common/dc3-common-facade/pom.xml test
|
||||
```
|
||||
@@ -17,7 +17,6 @@ services never depend on transport details.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-facade-api
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Facade Contracts
|
||||
|
||||
@@ -42,16 +41,19 @@ auto-configuration.
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-api -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module currently has no module-specific automated tests. Verify generated or production sources by compiling the
|
||||
affected reactor from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-common/dc3-common-facade/dc3-common-facade-api -am -DskipTests compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-facade-grpc` — gRPC-backed implementation
|
||||
- `dc3-common-facade-local-auth` / `-data` / `-manager` — in-process implementations
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -11,7 +11,6 @@ is the default implementation for the distributed (multi-service) deployment.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-facade-grpc
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Implementations
|
||||
|
||||
@@ -35,16 +34,19 @@ auth channel points at `dc3-center-auth:9300`).
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-grpc -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module currently has no module-specific automated tests. Verify generated or production sources by compiling the
|
||||
affected reactor from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-common/dc3-common-facade/dc3-common-facade-grpc -am -DskipTests compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-facade-api` — facade contracts
|
||||
- `dc3-common-facade-local-*` — in-process alternative used by `dc3-center-single`
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ local classpath — used inside the `dc3-center-single` monolith where auth, man
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-facade-local-auth
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Implementations
|
||||
|
||||
@@ -30,16 +29,18 @@ Active when the in-process facade mode is selected (`dc3.facade.mode=local`) and
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-auth -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-auth -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-facade-grpc` — gRPC alternative for distributed deployments
|
||||
- `dc3-common-facade-local-data` / `-manager` — sibling in-process facades
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ issuing gRPC calls — used inside the `dc3-center-single` monolith.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-facade-local-data
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Implementations
|
||||
|
||||
@@ -30,16 +29,18 @@ Active when the in-process facade mode is selected (`dc3.facade.mode=local`) and
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-data -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-data -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-facade-grpc` — gRPC alternative for distributed deployments
|
||||
- `dc3-common-facade-local-auth` / `-manager` — sibling in-process facades
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ issuing gRPC calls — used inside the `dc3-center-single` monolith.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-facade-local-manager
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Implementations
|
||||
|
||||
@@ -31,16 +30,18 @@ classpath.
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-manager -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-facade/dc3-common-facade-local-manager -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-facade-grpc` — gRPC alternative for distributed deployments
|
||||
- `dc3-common-facade-local-auth` / `-data` — sibling in-process facades
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# DC3 Common Facade Local
|
||||
|
||||
`dc3-common-facade-local` is a dependency-only POM that aggregates every in-process facade implementation:
|
||||
|
||||
- `dc3-common-facade-local-auth`
|
||||
- `dc3-common-facade-local-data`
|
||||
- `dc3-common-facade-local-manager`
|
||||
|
||||
It contains no Java implementation sources. Use it for an all-in-one process that deliberately needs the complete local
|
||||
surface. Other applications should depend on the narrowest domain-specific local facade to avoid unrelated transitive
|
||||
dependencies.
|
||||
|
||||
## Usage
|
||||
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>io.github.pnoker</groupId>
|
||||
<artifactId>dc3-common-facade-local</artifactId>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## Verification
|
||||
|
||||
Verify the aggregate and its dependencies from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q \
|
||||
-pl dc3-common/dc3-common-facade/dc3-common-facade-local -am \
|
||||
-DskipTests compile
|
||||
```
|
||||
@@ -10,7 +10,6 @@ factory and supporting services that validate tokens with the Auth Center before
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-gateway
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -26,7 +25,9 @@ factory and supporting services that validate tokens with the Auth Center before
|
||||
```
|
||||
Incoming HTTP request with Authorization: Bearer {token}
|
||||
→ AuthenticGatewayFilter
|
||||
→ gRPC: dc3-center-auth / TokenApi.checkTokenValid()
|
||||
→ FilterServiceImpl
|
||||
→ TokenFacade.checkValid()
|
||||
→ distributed mode: gRPC TokenApi.CheckValid
|
||||
← token valid: inject signed X-Auth-Principal header
|
||||
← token invalid: return 401 Unauthorized
|
||||
→ Forward to backend service
|
||||
@@ -35,7 +36,15 @@ Incoming HTTP request with Authorization: Bearer {token}
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-gateway -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-gateway -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -43,9 +52,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-gateway` — Bootstraps this module
|
||||
- `dc3-api-auth` — gRPC contract for token validation
|
||||
- `dc3-center-auth` — Token validation backend
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -2,46 +2,46 @@
|
||||
|
||||
## Overview
|
||||
|
||||
`dc3-common-log` is the shared logging aspect module of the IoT DC3 platform. It provides a custom AOP-based `@Logs`
|
||||
annotation for declarative method-level logging across all services.
|
||||
`dc3-common-log` provides the shared Logback configuration used by IoT DC3 applications. It contributes console and
|
||||
rolling JSON file appenders plus the Logstash Logback encoder dependency.
|
||||
|
||||
The former annotation/aspect logging implementation was removed. This module does not currently register Spring
|
||||
auto-configuration or provide `@Logs`, `LogsType`, or `LogsAspect` APIs.
|
||||
|
||||
## Module Information
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-log
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
## Resources
|
||||
|
||||
| Component | Purpose |
|
||||
|--------------|-------------------------------------------------------------------------------|
|
||||
| `@Logs` | Method annotation to enable structured logging for controller/service methods |
|
||||
| `LogsType` | Enum defining log types (e.g., `SysLog`, `OpLog`) |
|
||||
| `LogsAspect` | Spring AOP aspect that intercepts annotated methods and records log entries |
|
||||
| Resource | Purpose |
|
||||
|---|---|
|
||||
| `logback.xml` | Runtime console logging and size/time-based rolling JSON files |
|
||||
| `logback-test.xml` | Test logging defaults |
|
||||
| `AutoConfiguration.imports` | Intentionally empty; documents that no logging aspect is registered |
|
||||
|
||||
## Usage
|
||||
Spring Boot discovers the shared `logback.xml` from the dependency classpath. Applications normally set
|
||||
`logging.file.name` in their own `application.yml`; important overrides include `DC3_LOG_LEVEL`, `LOG_FILE`,
|
||||
`FILE_LOG_THRESHOLD`, and the standard `LOGBACK_ROLLINGPOLICY_*` properties.
|
||||
|
||||
```java
|
||||
@Logs(title = "Add Driver", type = LogsType.OpLog)
|
||||
@PostMapping("/add")
|
||||
public Mono<R<String>> add(@Validated(Add.class) @RequestBody DriverVO entityVO) {
|
||||
// method body
|
||||
}
|
||||
```
|
||||
Keep log messages in English, use parameterized placeholders, and never log credentials, tokens, passwords, or raw
|
||||
private payloads.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-log -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module has no Java implementation classes or module-specific tests. Verify packaging from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-log -am package
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
Used by controller layers in `dc3-common-auth`, `dc3-common-data`, `dc3-common-manager`.
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
Center, gateway, and driver applications consume the shared Logback resources through their module dependencies.
|
||||
|
||||
@@ -10,7 +10,6 @@ Center. It is wired into `dc3-center-manager`.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-manager
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -18,7 +17,7 @@ Center. It is wired into `dc3-center-manager`.
|
||||
|-------------------------------|-----------------------------------------------------------------------------------------------------|
|
||||
| Controllers | REST controllers for driver, device, profile, point, group, label, topic, etc. |
|
||||
| Services | `DriverService`, `DeviceService`, `ProfileService`, `PointService`, `DriverRegisterService` |
|
||||
| gRPC Servers (`@GrpcService`) | `DriverDriverServer`, `DriverDeviceServer`, `DriverPointServer`, `ManagerPointServer` |
|
||||
| gRPC Servers (Spring `@Service`) | `DriverDriverServer`, `DriverDeviceServer`, `DriverPointServer`, `ManagerPointServer` |
|
||||
| DAL Managers | `DriverManager`, `DeviceManager`, `ProfileManager`, `PointManager` (MyBatis-Plus `IService`) |
|
||||
| Metadata Events | `MetadataEventPublisher`, `MetadataEventListener` — async metadata change notification via RabbitMQ |
|
||||
| Scheduled Jobs | `ScheduleForManagerServiceImpl` — Quartz-based hourly statistics |
|
||||
@@ -47,7 +46,15 @@ REST: update device/point
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-manager -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-manager -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -56,10 +63,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-api-driver` — gRPC contracts implemented by this module
|
||||
- `dc3-api-manager` — Manager-side gRPC contracts implemented by this module
|
||||
- `dc3-common-model` — BO/VO/DTO/DO entities
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -2,24 +2,26 @@
|
||||
|
||||
## Overview
|
||||
|
||||
`dc3-common-model` is the shared domain model module of the IoT DC3 platform. It defines all base classes, domain
|
||||
entities (BO/VO/DTO/DO), validation group interfaces, and query objects used across all services and drivers.
|
||||
`dc3-common-model` is the shared domain model module of the IoT DC3 platform. It defines the base BO/VO/DTO classes,
|
||||
MapStruct builder contracts, JSON extension models, domain enums, validation groups, and shared transport DTOs used
|
||||
across services and drivers. Persistence DO classes remain in the modules that own their database tables.
|
||||
|
||||
## Module Information
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-model
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
### Base Classes
|
||||
|
||||
| Class | Purpose |
|
||||
|----------|--------------------------------------------------------------------------------------------|
|
||||
| `BaseBO` | Base business object — `id`, audit fields (creatorId, createTime, operatorId, operateTime) |
|
||||
| `BaseDO` | Base database object (MyBatis-Plus entity with `@TableId`) |
|
||||
| `BaseVO` | Base view object for REST request/response |
|
||||
| Class | Purpose |
|
||||
|---------------|---------------------------------------------------------------------------------------------|
|
||||
| `BaseBO` | Base business object with ID, remark, and creator/operator audit fields |
|
||||
| `BaseVO` | Base web view object with ID, remark, and creator/operator audit fields |
|
||||
| `BaseDTO` | Base cross-process DTO with ID and audit timestamps |
|
||||
| `BaseBuilder` | MapStruct conversion contract for `VO <-> BO <-> DTO` |
|
||||
| `BaseExt` | Base JSON extension model used by domain-specific `*Ext` classes |
|
||||
|
||||
### Validation Groups
|
||||
|
||||
@@ -32,11 +34,14 @@ Used with `@Validated(...)` in controllers:
|
||||
| `Select` | Marks fields for query operations |
|
||||
| `Read` / `Auth` | Specialized validation groups |
|
||||
|
||||
### Common Entities
|
||||
### Shared DTOs and Extensions
|
||||
|
||||
- `RequestHeader.PrincipalHeader` — Carries tenant/user ID extracted from gateway-injected headers
|
||||
- `Pages` — Pagination parameters (current page, page size)
|
||||
- `TreeNode` — Generic tree structure for hierarchical data
|
||||
- `MetadataEventDTO` — Metadata-change event transferred to driver listeners
|
||||
- `PointCommandDTO` / `PointCommandResultDTO` — Point command request/result payloads
|
||||
- `CommandCallDTO` / `CommandCallResultDTO` — Custom command request/result payloads
|
||||
- Domain-specific `*Ext` classes — JSON extension-column shapes
|
||||
|
||||
`RequestHeader`, `Pages`, `TreeNode`, `R<T>`, and `TenantOwned` belong to `dc3-common-public`, not this module.
|
||||
|
||||
## Usage Example
|
||||
|
||||
@@ -52,16 +57,17 @@ public Mono<R<String>> update(@Validated(Update.class) @RequestBody DriverVO ent
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-model -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-model -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
Foundation for all `dc3-common-*`, `dc3-center-*`, and `dc3-driver-*` modules.
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ the MQTT driver and any service requiring MQTT connectivity.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-mqtt
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -49,18 +48,19 @@ MQTT driver (`dc3-driver-mqtt`) depends on this module as its primary integratio
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-mqtt -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-mqtt -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-driver-mqtt` — Primary consumer of this module
|
||||
- MQTT broker: the dev profile points at the RabbitMQ MQTT plugin (`dc3-rabbitmq:2883`); EMQX is also available via the
|
||||
optional stack (`podman compose -f dc3/docker-compose-optional.yml up -d`, port `31883`)
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
optional stack (`make up-optional`, port `31883`)
|
||||
|
||||
@@ -10,7 +10,6 @@ their primary storage.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-postgres
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -52,16 +51,18 @@ Each center service uses a separate Postgres schema via `currentSchema` in the J
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-postgres -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-postgres -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-manager`, `dc3-common-auth`, `dc3-common-data` — Include this as a dependency for Postgres access
|
||||
- `dc3-common-dal` — Builds on top of this for shared DAL entities
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
|
||||
## Overview
|
||||
|
||||
`dc3-common-public` is the foundational common utilities module of the IoT DC3 platform. It provides the universal
|
||||
response wrapper (`R<T>`), base entity classes, JWT key management, HTTP client configuration, and shared utility
|
||||
functions used across all platform modules.
|
||||
`dc3-common-public` is the foundational public contracts and utilities module of the IoT DC3 platform. It provides the
|
||||
universal response wrapper (`R<T>`), `BaseService`, shared request/pagination/tree entities, tenant markers, HTTP client
|
||||
configuration, HMAC signing, and framework-neutral utility functions.
|
||||
|
||||
## Module Information
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-public
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -45,9 +44,11 @@ Fields: `ok` (boolean), `code` (String), `message` (String), `data` (T)
|
||||
| Utility | Purpose |
|
||||
|-----------------------|----------------------------------------------------------|
|
||||
| `JsonUtil` | Jackson JSON serialization/deserialization helpers |
|
||||
| `PrincipalHeaderUtil` | Extracts `PrincipalHeader` from reactive WebFlux context |
|
||||
| `HostUtil` | Resolves host/IP information |
|
||||
| `ResponseUtil` | Writes HTTP responses in WebFlux context |
|
||||
| `PageUtil` | Converts and normalizes pagination objects |
|
||||
| `HmacAuthSigner` | Signs and verifies trusted gateway principal headers |
|
||||
|
||||
WebFlux-specific `BaseController`, `PrincipalHeaderUtil`, and `ResponseUtil` belong to `dc3-common-web`.
|
||||
|
||||
### HTTP Client
|
||||
|
||||
@@ -79,15 +80,17 @@ Secret lookup order:
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-public -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-public -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
Foundation for all `dc3-common-*`, `dc3-center-*`, and `dc3-driver-*` modules.
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ and Driver modules for periodic tasks.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-quartz
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -35,15 +34,17 @@ quartzService.startScheduler();
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-quartz -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-quartz -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-manager` — Uses `QuartzService` for hourly data-volume statistics jobs
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -2,34 +2,40 @@
|
||||
|
||||
## Overview
|
||||
|
||||
`dc3-common-rabbitmq` is the shared RabbitMQ configuration module of the IoT DC3 platform. It defines all topic
|
||||
exchanges, queue bindings, and connection configuration used for asynchronous communication between services and
|
||||
drivers.
|
||||
`dc3-common-rabbitmq` is the shared RabbitMQ infrastructure module of the IoT DC3 platform. It defines the durable
|
||||
platform exchanges, connection factory, message conversion, and profile activation used by services and drivers.
|
||||
Domain modules own their queues and bindings.
|
||||
|
||||
## Module Information
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-rabbitmq
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
| Component | Purpose |
|
||||
|-----------------------------|----------------------------------------------------------------------|
|
||||
| `ExchangeConfig` | Declares all 5 topic exchanges as persistent Spring beans |
|
||||
| `ExchangeConfig` | Declares the shared durable topic exchanges |
|
||||
| `RabbitConfig` | Connection factory and Jackson-based message converter configuration |
|
||||
| `RabbitmqEnvironmentConfig` | Binds RabbitMQ connection properties from environment variables |
|
||||
| `ActiveRabbitProfileConfig` | Profile-conditional activation |
|
||||
| `RabbitmqEnvironmentConfig` | Loads RabbitMQ environment defaults |
|
||||
| `ActiveRabbitProfileConfig` | Activates the `rabbit` profile unless explicitly disabled |
|
||||
|
||||
## Topic Exchanges
|
||||
|
||||
| Exchange Bean | Exchange Name | Purpose |
|
||||
|--------------------|------------------|---------------------------------------------|
|
||||
| `eventExchange` | `dc3.e.event` | Driver/device status events (load-balanced) |
|
||||
| `metadataExchange` | `dc3.e.metadata` | Metadata change broadcast to drivers |
|
||||
| `commandExchange` | `dc3.e.command` | Commands from data service to drivers |
|
||||
| `valueExchange` | `dc3.e.value` | Point values from drivers to data center |
|
||||
| `mqttExchange` | `dc3.e.mqtt` | MQTT-to-platform message bridging |
|
||||
| Exchange bean(s) | Base exchange name(s) | Purpose |
|
||||
|---|---|---|
|
||||
| `stateExchange`, `alarmExchange` | `dc3.e.state`, `dc3.e.alarm` | Driver/device state and alarm processing |
|
||||
| `metadataExchange` | `dc3.e.metadata` | Metadata change broadcast to drivers |
|
||||
| `pointCommandExchange` | `dc3.e.point_command` | Point read/write commands |
|
||||
| `valueExchange` | `dc3.e.value` | Point values from drivers to Data Center |
|
||||
| `mqttExchange` | `dc3.e.mqtt` | MQTT-to-platform message bridging |
|
||||
| `stateTimeoutDelayExchange`, `stateTimeoutCheckExchange` | `dc3.e.state_timeout_delay`, `dc3.e.state_timeout_check` | Delayed state-timeout checks |
|
||||
| `commandExchange`, `commandResultExchange`, `commandDeadExchange` | `dc3.e.command`, `dc3.e.command_result`, `dc3.e.command_dead` | Custom commands, results, and dead letters |
|
||||
| `eventExchange` | `dc3.e.event` | Reported domain events |
|
||||
|
||||
`ExchangeConfig` currently declares 12 shared exchanges. Data and driver modules add queues, bindings, and specialized
|
||||
dead-letter/result exchanges. The optional `dc3.rabbit.tag` system property prefixes runtime names, so use
|
||||
`RabbitConstant` rather than duplicating literal names in code.
|
||||
|
||||
## Configuration Properties
|
||||
|
||||
@@ -56,18 +62,20 @@ and set Spring Boot's native `spring.rabbitmq.ssl.trust-store`, `trust-store-typ
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-rabbitmq -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-rabbitmq -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-constant` / `RabbitConstant` — All exchange/queue/routing key names
|
||||
- `dc3-common-data` — Consumes `dc3.e.value`, publishes to `dc3.e.command`
|
||||
- `dc3-common-data` — Consumes values/state/events and publishes point/custom commands
|
||||
- `dc3-common-manager` — Publishes to `dc3.e.metadata`
|
||||
- `dc3-common-driver` — Consumes from `dc3.e.metadata`, `dc3.e.command`; publishes to `dc3.e.value`
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
- `dc3-common-driver` — Consumes metadata and point/custom commands; publishes values and command results
|
||||
|
||||
@@ -10,7 +10,6 @@ backends without coupling business logic to a specific storage implementation.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-repository
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -51,16 +50,18 @@ Set `dc3.repository.auto-profile=false` to opt out of automatic `repository` pro
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-repository -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-repository -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-data` — Uses `RepositoryStrategyFactory` to route point-value persistence operations
|
||||
- `dc3-common-data` — Caches latest point values with in-process `LocalCacheService` alongside repository storage
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
- `dc3-common-data` — Caches latest point values with `PointValueLocalCache` alongside repository storage
|
||||
|
||||
@@ -10,7 +10,6 @@ deployed, so permissions can be granted against real endpoints.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-resource-registrar
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -34,16 +33,18 @@ gRPC or in-process facade transport.
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-resource-registrar -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-resource-registrar -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-center-*` — include this module to register their API resources
|
||||
- `dc3-common-auth` — owns the resource registry on the receiving side
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ and query execution, so each database driver only supplies its dialect/connectio
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-sql
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -26,16 +25,18 @@ and query execution, so each database driver only supplies its dialect/connectio
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-sql -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-sql -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-driver-mysql`, `dc3-driver-oracle`, `dc3-driver-postgresql`, `dc3-driver-sqlserver` — JDBC drivers that extend
|
||||
`AbstractJdbcDriverCustomService`
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ fixtures.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-test
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -27,21 +26,24 @@ fixtures.
|
||||
## Usage
|
||||
|
||||
Add as a `test`-scoped dependency. Integration tests requiring real infrastructure use the Testcontainers helpers
|
||||
(PostgreSQL + TimescaleDB, RabbitMQ, MQTT), which need a running container runtime (`podman`).
|
||||
(PostgreSQL + TimescaleDB, RabbitMQ, MQTT), which need a Docker-compatible container runtime.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-test -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
This module currently has no module-specific automated tests. Verify generated or production sources by compiling the
|
||||
affected reactor from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -pl dc3-common/dc3-common-test -am -DskipTests compile
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-e2e` — backend end-to-end suite built on these helpers
|
||||
- Consumed test-scoped by `dc3-common-*` and `dc3-center-*` modules
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ concurrent point reads and batch message handling.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-thread
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
@@ -33,8 +32,8 @@ dc3:
|
||||
|
||||
## Usage
|
||||
|
||||
Inject the executor you need, e.g. `private final ExecutorService virtualThreadExecutor;` in `PointValueJob` /
|
||||
`MqttScheduleJob`, or `private final ThreadPoolExecutor threadPoolExecutor;` in `DriverReadScheduleJob`.
|
||||
Inject the executor you need, for example `virtualThreadExecutor` in `MqttScheduleJob`, or `threadPoolExecutor` in
|
||||
`DriverReadScheduleJob`. Data services also inject the shared executors for concurrent persistence and message work.
|
||||
|
||||
> Note: Spring's `@Async` does **not** use these beans — it runs on Spring Boot's default `applicationTaskExecutor`.
|
||||
> These executors are obtained by explicit constructor injection, not via `@Async`.
|
||||
@@ -42,7 +41,15 @@ Inject the executor you need, e.g. `private final ExecutorService virtualThreadE
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-thread -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-thread -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
@@ -50,10 +57,3 @@ mvn -s ../../.mvn/settings.xml clean package
|
||||
- `dc3-common-data` / `dc3-common-mqtt` — inject `virtualThreadExecutor` for batch persistence / message handling
|
||||
- `dc3-common-driver` — injects `threadPoolExecutor` for concurrent device reads
|
||||
- `dc3-driver-opc-da` — injects `scheduledThreadPoolExecutor`
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -10,16 +10,16 @@ REST-based center services.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-common-web
|
||||
- **Version**: 2026.5.22
|
||||
|
||||
## Key Components
|
||||
|
||||
| Component | Purpose |
|
||||
|-------------------|--------------------------------------------------------------------------------------|
|
||||
| `WebFluxConfig` | Global WebFlux configuration (codecs, CORS, message converters) |
|
||||
| `ExceptionConfig` | `@ControllerAdvice` global exception handler mapping exceptions to `R<T>` responses |
|
||||
| `WebFilterConfig` | Registers global web filters (e.g., request logging, context enrichment) |
|
||||
| `ResponseUtil` | Utilities for writing non-controller `ServerHttpResponse` bodies in reactive context |
|
||||
| Component | Purpose |
|
||||
|-------------------------|--------------------------------------------------------------------------------------|
|
||||
| `WebFluxConfig` | Global WebFlux configuration (codecs, CORS, message converters) |
|
||||
| `WebFluxSecurityConfig` | Security chain, public-path rules, and facade-backed authorization |
|
||||
| `RequestIdWebFilter` | Adds and propagates request IDs for tracing |
|
||||
| `ExceptionConfig` | `@ControllerAdvice` global exception handler mapping exceptions to `R<T>` responses |
|
||||
| `ResponseUtil` | Utilities for writing non-controller `ServerHttpResponse` bodies in reactive context |
|
||||
|
||||
## Exception Handling
|
||||
|
||||
@@ -36,17 +36,18 @@ All exceptions thrown by controllers are caught by `ExceptionConfig` and mapped
|
||||
## Build Instructions
|
||||
|
||||
```bash
|
||||
mvn -s ../../.mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-web -am package
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-common/dc3-common-web -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-auth`, `dc3-common-data`, `dc3-common-manager` — All include this for reactive web support
|
||||
- `dc3-common-public` — Provides `R<T>` response wrapper
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# DC3 Coverage
|
||||
|
||||
`dc3-coverage` is a report-only Maven module. It aggregates JaCoCo execution data from the covered handwritten-code
|
||||
modules and applies the repository's absolute coverage gate.
|
||||
|
||||
## Generate and Verify the Report
|
||||
|
||||
From the repository root:
|
||||
|
||||
```bash
|
||||
make coverage
|
||||
```
|
||||
|
||||
Equivalent Maven command:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -B -Dmaven.test.skip=false -pl dc3-coverage -am verify
|
||||
```
|
||||
|
||||
Outputs:
|
||||
|
||||
- HTML: `dc3-coverage/target/site/jacoco-aggregate/index.html`
|
||||
- XML: `dc3-coverage/target/site/jacoco-aggregate/jacoco.xml`
|
||||
|
||||
## Gate
|
||||
|
||||
The minimum line and branch ratios are configured in this module's `pom.xml`. The verify phase passes the aggregate XML
|
||||
to `scripts/check_coverage.py`, which checks those absolute thresholds.
|
||||
|
||||
There is currently no baseline-relative regression calculation. Do not describe the build as enforcing a percentage
|
||||
drop against a previous commit unless such a comparison is implemented.
|
||||
|
||||
Use `-Dcoverage.check.skip=true` only for local diagnosis; do not disable the gate in normal CI or release validation.
|
||||
|
||||
## Adding covered modules
|
||||
|
||||
Add a dependency in `pom.xml` only for a module whose handwritten classes should contribute to the aggregate. Generated
|
||||
API artifacts and deployment-only wrappers should remain excluded unless the coverage policy changes deliberately.
|
||||
@@ -0,0 +1,47 @@
|
||||
# DC3 Drivers
|
||||
|
||||
`dc3-driver` contains protocol adapters built on `dc3-common-driver`. Each driver owns protocol I/O and user-facing
|
||||
attribute metadata; the SDK owns registration, scheduling, metadata refresh, health integration, commands, and value
|
||||
dispatch.
|
||||
|
||||
## Modules
|
||||
|
||||
| Family | Modules |
|
||||
|---|---|
|
||||
| Industrial protocols | `bacnet-ip`, `can`, `dlms`, `ethernet-ip`, `fins`, `iec104`, `melsec`, `modbus-rtu`, `modbus-tcp`, `opc-da`, `opc-ua`, `plcs7`, `sl651`, `snmp` |
|
||||
| Messaging/network | `coap`, `http`, `lwm2m`, `mqtt`, `tcp-udp` |
|
||||
| Databases | `mysql`, `oracle`, `postgresql`, `sqlserver` |
|
||||
| Local/device buses | `ble`, `serial`, `zigbee` |
|
||||
| Simulation | `virtual`, `listening-virtual` |
|
||||
|
||||
The following drivers currently declare incomplete protocol I/O and must be treated as work in progress: `can`, `dlms`,
|
||||
`ethernet-ip`, `iec104`, `lwm2m`, `mqtt`, `opc-da`, and `zigbee`. Check the child README and implementation before
|
||||
production use.
|
||||
|
||||
## Driver metadata
|
||||
|
||||
`src/main/resources/application.yml` is authoritative for:
|
||||
|
||||
- stable driver `code` and client/server `type`;
|
||||
- driver, point, command, and event attribute codes/types/defaults;
|
||||
- scheduling and health defaults;
|
||||
- local buffering configuration.
|
||||
|
||||
Changing a driver code requires a metadata and RabbitMQ routing migration. Keep display names and remarks in English.
|
||||
|
||||
## Build and run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -q -f dc3-driver/pom.xml -DskipTests compile
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-modbus-tcp -am test
|
||||
make run SERVICE=modbus-tcp
|
||||
```
|
||||
|
||||
Replace `modbus-tcp` with the desired driver service. A runnable driver also needs database/messaging infrastructure and
|
||||
the required center services; use the root Makefile to start the appropriate stack.
|
||||
|
||||
## Child README requirements
|
||||
|
||||
Every driver README should document readiness, prerequisites, the supported attribute surface, read/write operations,
|
||||
a focused test command, limitations, and any host/container device requirements. Include exact codes/defaults when they
|
||||
help operators, but treat `application.yml` as the authoritative metadata definition.
|
||||
@@ -10,7 +10,6 @@ number, object type, object instance, and property identifier.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-bacnet-ip
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: BACnet IP Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -41,6 +40,9 @@ number, object type, object instance, and property identifier.
|
||||
| Object Instance | Object instance number |
|
||||
| Property ID | Property identifier |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable BACnet/IP device (or simulator) on the network. Communication uses UDP, typically on port 47808.
|
||||
@@ -50,23 +52,25 @@ A reachable BACnet/IP device (or simulator) on the network. Communication uses U
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-bacnet-ip -am package
|
||||
java -jar dc3-driver/dc3-driver-bacnet-ip/target/dc3-driver-bacnet-ip.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-bacnet-ip -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ characteristics.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-ble
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Bluetooth LE Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -37,6 +36,9 @@ characteristics.
|
||||
| Service UUID | GATT Service UUID |
|
||||
| Characteristic UUID | GATT Characteristic UUID for writing |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A host with a Bluetooth adapter and the TinyB native library available, plus a reachable BLE peripheral exposing the
|
||||
@@ -47,23 +49,25 @@ configured GATT service and characteristics.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-ble -am package
|
||||
java -jar dc3-driver/dc3-driver-ble/target/dc3-driver-ble.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-ble -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -15,7 +15,6 @@ SocketCAN interface, parsing frame payloads into device point values and sending
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-can
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: CAN Bus Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -45,6 +44,9 @@ SocketCAN interface, parsing frame payloads into device point values and sending
|
||||
| CAN ID | CAN identifier to write to |
|
||||
| Data | Frame data (supports `${value}`) |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A Linux host with an available SocketCAN interface (e.g. `can0`) and the `can-utils` package installed (`candump`,
|
||||
@@ -55,23 +57,25 @@ A Linux host with an available SocketCAN interface (e.g. `can0`) and the `can-ut
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-can -am package
|
||||
java -jar dc3-driver/dc3-driver-can/target/dc3-driver-can.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-can -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ resource path and the write path performs CoAP PUT requests.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-coap
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: CoAP Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -28,6 +27,9 @@ resource path and the write path performs CoAP PUT requests.
|
||||
| Write Path | CoAP resource path for writing point data |
|
||||
| Content Format | Content format: json, text, cbor, octet-stream |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable CoAP device (or simulator) exposing the configured resource paths. CoAP commonly uses UDP port 5683.
|
||||
@@ -37,23 +39,25 @@ A reachable CoAP device (or simulator) exposing the configured resource paths. C
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-coap -am package
|
||||
java -jar dc3-driver/dc3-driver-coap/target/dc3-driver-coap.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-coap -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -17,7 +17,6 @@ and decode DLMS frames.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-dlms
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: DLMS/COSEM Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -42,6 +41,9 @@ and decode DLMS frames.
|
||||
| Logical Name | Object logical name / OBIS code (e.g. 1.0.1.8.0.255) |
|
||||
| Attribute ID | Attribute ID (2 = Present Value) |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable DLMS/COSEM device (or simulator) over TCP (default port 4059) or serial, plus the matching client/ server
|
||||
@@ -52,23 +54,25 @@ addresses and authentication settings.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-dlms -am package
|
||||
java -jar dc3-driver/dc3-driver-dlms/target/dc3-driver-dlms.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-dlms -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -17,7 +17,6 @@ services.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-ethernet-ip
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: EtherNet/IP Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -43,6 +42,9 @@ services.
|
||||
|--------------|--------------------------------------|
|
||||
| Send Command | Value to write (supports `${value}`) |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable Rockwell Allen-Bradley (or compatible) EtherNet/IP PLC, typically on TCP port 44818.
|
||||
@@ -52,23 +54,25 @@ A reachable Rockwell Allen-Bradley (or compatible) EtherNet/IP PLC, typically on
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-ethernet-ip -am package
|
||||
java -jar dc3-driver/dc3-driver-ethernet-ip/target/dc3-driver-ethernet-ip.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-ethernet-ip -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ supports the D, W, H, and C memory areas. No external protocol library is used.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-fins
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Omron FINS Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -43,6 +42,9 @@ supports the D, W, H, and C memory areas. No external protocol library is used.
|
||||
| Address | Word address within the area |
|
||||
| Data Type | Value data type |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable Omron PLC speaking FINS over TCP, typically on port 9600.
|
||||
@@ -52,23 +54,25 @@ A reachable Omron PLC speaking FINS over TCP, typically on port 9600.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-fins -am package
|
||||
java -jar dc3-driver/dc3-driver-fins/target/dc3-driver-fins.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-fins -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ via request body templates containing a `${value}` placeholder.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-http
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: HTTP REST Client Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -38,6 +37,9 @@ via request body templates containing a `${value}` placeholder.
|
||||
| Path | API path for command |
|
||||
| Method | HTTP method for command |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable HTTP/REST endpoint that the driver can call as configured via the device's Base URL and point paths.
|
||||
@@ -47,23 +49,25 @@ A reachable HTTP/REST endpoint that the driver can call as configured via the de
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-http -am package
|
||||
java -jar dc3-driver/dc3-driver-http/target/dc3-driver-http.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-http -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -16,7 +16,6 @@ polling for IEC 104 client connections.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-iec104
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: IEC 104 Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -44,6 +43,9 @@ polling for IEC 104 client connections.
|
||||
|--------------|-------------|
|
||||
| Send Command | |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable IEC 60870-5-104 server (substation/telecontrol device or simulator) addressable by the configured host and
|
||||
@@ -54,23 +56,25 @@ port.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-iec104 -am package
|
||||
java -jar dc3-driver/dc3-driver-iec104/target/dc3-driver-iec104.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-iec104 -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ patterns supporting both TCP and UDP transports.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-listening-virtual
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Listening Virtual TCP/UDP Driver
|
||||
|
||||
## Service Ports
|
||||
@@ -31,28 +30,33 @@ patterns supporting both TCP and UDP transports.
|
||||
|
||||
This driver declares no device-level driver attributes; all configuration is per-point.
|
||||
|
||||
The module `application.yml` and its profile-specific variants are authoritative for attribute codes, types, default
|
||||
values, scheduling, health, and local buffering. Keep this README aligned when that metadata changes.
|
||||
|
||||
## Running Locally
|
||||
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-listening-virtual -am package
|
||||
java -jar dc3-driver/dc3-driver-listening-virtual/target/dc3-driver-listening-virtual.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-listening-virtual -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -14,7 +14,6 @@ Instance / Resource ID.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-lwm2m
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: LwM2M Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -38,6 +37,9 @@ Instance / Resource ID.
|
||||
| Resource ID | LwM2M Resource ID (e.g. 5700=Sensor Value) |
|
||||
| Observe | Enable LwM2M Observe: true, false |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
LwM2M client devices that register with the embedded Leshan server. The server binds to the configured `Server Host` /
|
||||
@@ -48,23 +50,25 @@ LwM2M client devices that register with the embedded Leshan server. The server b
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-lwm2m -am package
|
||||
java -jar dc3-driver/dc3-driver-lwm2m/target/dc3-driver-lwm2m.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-lwm2m -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ the MC protocol using the `iot-communication` library, reading and writing devic
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-melsec
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Mitsubishi Melsec Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -28,6 +27,9 @@ the MC protocol using the `iot-communication` library, reading and writing devic
|
||||
| Device Address | Device memory address (D100, M0, X10, W200 etc.) |
|
||||
| String Length | String read length (0 for non-string types) |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable Mitsubishi Melsec PLC (or simulator) exposing the MC protocol over TCP, addressable by the configured host
|
||||
@@ -38,23 +40,25 @@ and port.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-melsec -am package
|
||||
java -jar dc3-driver/dc3-driver-melsec/target/dc3-driver-melsec.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-melsec -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ values to coils and holding registers.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-modbus-rtu
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Modbus RTU Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -40,6 +39,9 @@ values to coils and holding registers.
|
||||
| Offset | Register or coil address offset |
|
||||
| Value Template | Value template rendered with command params |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A Modbus RTU slave device connected to an accessible serial port (e.g. `/dev/ttyUSB0`, `COM3`) on the host running the
|
||||
@@ -50,23 +52,25 @@ driver.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-modbus-rtu -am package
|
||||
java -jar dc3-driver/dc3-driver-modbus-rtu/target/dc3-driver-modbus-rtu.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-modbus-rtu -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,7 +9,6 @@ devices, reads coil/register values periodically, and supports write commands fo
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-modbus-tcp
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Modbus TCP Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -36,6 +35,9 @@ devices, reads coil/register values periodically, and supports write commands fo
|
||||
| Offset | Register/coil address offset |
|
||||
| Value Template | Template for the value to write |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A running Modbus TCP slave device or simulator accessible on the network.
|
||||
@@ -45,23 +47,25 @@ A running Modbus TCP slave device or simulator accessible on the network.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-modbus-tcp -am package
|
||||
java -jar dc3-driver/dc3-driver-modbus-tcp/target/dc3-driver-modbus-tcp.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-modbus-tcp -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -13,7 +13,6 @@ topics, parse incoming payloads as device point values, and forward commands to
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-mqtt
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: MQTT Driver
|
||||
|
||||
## Point Attributes
|
||||
@@ -39,13 +38,16 @@ topics, parse incoming payloads as device point values, and forward commands to
|
||||
| Event Code Path | Path to the event code in payload |
|
||||
| Payload Path | Path to the event payload |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An MQTT broker must be running. The dev profile connects to the RabbitMQ MQTT plugin (`dc3-rabbitmq:2883`), which ships
|
||||
with the base stack:
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
EMQX is available as an alternative via the optional stack (`docker-compose-optional.yml`, port `31883`); point
|
||||
@@ -56,24 +58,26 @@ EMQX is available as an alternative via the optional stack (`docker-compose-opti
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-mqtt -am package
|
||||
java -jar dc3-driver/dc3-driver-mqtt/target/dc3-driver-mqtt.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-mqtt -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration and RabbitMQ integration
|
||||
- `dc3-common-mqtt` — MQTT client configuration and utilities
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-mysql
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: MySQL Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -37,6 +36,9 @@
|
||||
|---------------|----------------------------------|
|
||||
| Execute Query | SQL query to execute for command |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable MySQL database addressable by the configured host, port, and credentials.
|
||||
@@ -46,24 +48,26 @@ A reachable MySQL database addressable by the configured host, port, and credent
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-mysql -am package
|
||||
java -jar dc3-driver/dc3-driver-mysql/target/dc3-driver-mysql.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-mysql -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
- `dc3-common-sql` — Abstract JDBC driver service (connection pooling, read/write query execution)
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -5,11 +5,14 @@
|
||||
`dc3-driver-opc-da` is the OPC DA (Data Access) protocol driver of the IoT DC3 platform. It connects to OPC DA servers
|
||||
using DCOM/J-Interop to read real-time process data from OPC-compliant industrial devices and SCADA systems.
|
||||
|
||||
> **Work in progress.** Protocol-level I/O is not fully implemented in `OpcDaDriverCustomServiceImpl`. Treat this
|
||||
> module as an integration skeleton, not a production-ready OPC DA driver, until its read/write TODOs are completed and
|
||||
> verified against a real server.
|
||||
|
||||
## Module Information
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-opc-da
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: OPC DA Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -28,6 +31,9 @@ using DCOM/J-Interop to read real-time process data from OPC-compliant industria
|
||||
| Group | OPC DA item group name |
|
||||
| Tag | OPC DA item tag name |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- An OPC DA server running on a Windows host accessible via DCOM
|
||||
@@ -39,23 +45,25 @@ using DCOM/J-Interop to read real-time process data from OPC-compliant industria
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-opc-da -am package
|
||||
java -jar dc3-driver/dc3-driver-opc-da/target/dc3-driver-opc-da.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-opc-da -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,7 +9,6 @@ servers to read and write node values from industrial automation systems using t
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-opc-ua
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: OPC UA Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -27,6 +26,9 @@ servers to read and write node values from industrial automation systems using t
|
||||
| Namespace | OPC UA node namespace index |
|
||||
| Tag | OPC UA node identifier |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An OPC UA server (e.g., Milo server, Prosys OPC UA Simulation Server) accessible on the network.
|
||||
@@ -36,23 +38,25 @@ An OPC UA server (e.g., Milo server, Prosys OPC UA Simulation Server) accessible
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-opc-ua -am package
|
||||
java -jar dc3-driver/dc3-driver-opc-ua/target/dc3-driver-opc-ua.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-opc-ua -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -11,7 +11,6 @@ queries and writes through configured `UPDATE`/`INSERT` queries. JDBC connection
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-oracle
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Oracle Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -41,6 +40,9 @@ queries and writes through configured `UPDATE`/`INSERT` queries. JDBC connection
|
||||
|---------------|----------------------------------|
|
||||
| Execute Query | SQL query to execute for command |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable Oracle database addressable by the configured host, port, credentials, and connection type (SID or Service
|
||||
@@ -51,24 +53,26 @@ Name).
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-oracle -am package
|
||||
java -jar dc3-driver/dc3-driver-oracle/target/dc3-driver-oracle.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-oracle -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
- `dc3-common-sql` — Abstract JDBC driver service (connection pooling, read/write query execution)
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-plcs7
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: PLC S7 Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -28,6 +27,9 @@
|
||||
| Byte Offset | Byte offset within the data block |
|
||||
| Bit Offset | Bit offset within the byte (for boolean points) |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Siemens S7 PLC (S7-200 Smart, S7-1200, S7-1500 or compatible)
|
||||
@@ -39,23 +41,25 @@
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-plcs7 -am package
|
||||
java -jar dc3-driver/dc3-driver-plcs7/target/dc3-driver-plcs7.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-plcs7 -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -11,7 +11,6 @@ JDBC URL `jdbc:postgresql://<host>:<port>/<database>` using the `org.postgresql.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-postgresql
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: PostgreSQL Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -38,6 +37,9 @@ JDBC URL `jdbc:postgresql://<host>:<port>/<database>` using the `org.postgresql.
|
||||
|---------------|--------------|--------|----------------------------------|
|
||||
| Execute Query | executeQuery | STRING | SQL query to execute for command |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable PostgreSQL database. The connection URL, credentials, and the SQL queries to run are all supplied through
|
||||
@@ -48,24 +50,26 @@ the driver and point attributes above — nothing is hardcoded.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-postgresql -am package
|
||||
java -jar dc3-driver/dc3-driver-postgresql/target/dc3-driver-postgresql.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-postgresql -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
- `dc3-common-sql` — `AbstractJdbcDriverCustomService` base class providing JDBC read/write logic
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -12,7 +12,6 @@ with the `${value}` placeholder substituted.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-serial
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Serial Port Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -47,6 +46,9 @@ with the `${value}` placeholder substituted.
|
||||
| Send Command | sendCommand | STRING | ${value} | HEX command template with ${value} placeholder |
|
||||
| Byte Order | byteOrder | STRING | BIG | Byte order for encoding value: BIG, LITTLE |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A serial device connected to a serial port reachable from the host running the driver (e.g. `/dev/ttyUSB0`). The port
|
||||
@@ -57,23 +59,25 @@ path and line parameters (baud rate, data/stop bits, parity, timeout) are suppli
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-serial -am package
|
||||
java -jar dc3-driver/dc3-driver-serial/target/dc3-driver-serial.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-serial -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -17,7 +17,6 @@ false`); only the custom schedule and device health check are enabled.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-sl651
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: SL651 Hydrological Telemetry Driver
|
||||
|
||||
## Service Ports
|
||||
@@ -41,6 +40,9 @@ The listen port is exposed as a driver attribute (see below) and read at startup
|
||||
|---------------|-------|------|---------|-------------------------------------------------------|
|
||||
| Element Index | index | INT | 0 | Zero-based index into the telemetry body element list |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
SL651-2014 remote stations configured to report to this driver's listen port (default 5001). The `iot-communication`
|
||||
@@ -52,23 +54,25 @@ the SL651 API is unavailable.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-sl651 -am package
|
||||
java -jar dc3-driver/dc3-driver-sl651/target/dc3-driver-sl651.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-sl651 -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ issue an SNMP SET, with one SNMP session cached per device.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-snmp
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: SNMP Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -41,6 +40,9 @@ issue an SNMP SET, with one SNMP session cached per device.
|
||||
| OID | oid | STRING | | |
|
||||
| SNMP Type | snmpType | STRING | OCTET_STRING | |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable SNMP agent. The agent host/port, SNMP version, community string, and per-point OIDs are supplied through the
|
||||
@@ -52,23 +54,25 @@ supports SNMP v1 and v2c.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-snmp -am package
|
||||
java -jar dc3-driver/dc3-driver-snmp/target/dc3-driver-snmp.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-snmp -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -13,7 +13,6 @@ using the `com.microsoft.sqlserver.jdbc.SQLServerDriver`.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-sqlserver
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: SQL Server Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -42,6 +41,9 @@ using the `com.microsoft.sqlserver.jdbc.SQLServerDriver`.
|
||||
|---------------|--------------|--------|----------------------------------|
|
||||
| Execute Query | executeQuery | STRING | SQL query to execute for command |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable Microsoft SQL Server instance. The connection URL, credentials, encryption flags, and the SQL queries to run
|
||||
@@ -52,24 +54,26 @@ are all supplied through the driver and point attributes above — nothing is ha
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-sqlserver -am package
|
||||
java -jar dc3-driver/dc3-driver-sqlserver/target/dc3-driver-sqlserver.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-sqlserver -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
- `dc3-common-sql` — `AbstractJdbcDriverCustomService` base class providing JDBC read/write logic
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -14,7 +14,6 @@ directly.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-tcp-udp
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: TCP/UDP Raw Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -47,6 +46,9 @@ directly.
|
||||
|--------------|-------------|--------|----------|-------------|
|
||||
| Send Command | sendCommand | STRING | ${value} | |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A reachable TCP or UDP endpoint. The protocol selection, host/port, timeouts, and per-point HEX commands are supplied
|
||||
@@ -57,23 +59,25 @@ through the driver and point attributes above.
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-tcp-udp -am package
|
||||
java -jar dc3-driver/dc3-driver-tcp-udp/target/dc3-driver-tcp-udp.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-tcp-udp -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -10,7 +10,6 @@ hardware.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-virtual
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Virtual Driver
|
||||
|
||||
## Driver Attributes
|
||||
@@ -42,6 +41,9 @@ hardware.
|
||||
|
||||
## Data Collection Schedule
|
||||
|
||||
The module `application.yml` and its profile-specific variants are authoritative for attribute codes, types, default
|
||||
values, scheduling, health, and local buffering. Keep this README aligned when that metadata changes.
|
||||
|
||||
Configured in `application-dev.yml`:
|
||||
|
||||
```yaml
|
||||
@@ -57,14 +59,14 @@ dc3:
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-virtual -am package
|
||||
java -jar dc3-driver/dc3-driver-virtual/target/dc3-driver-virtual.jar
|
||||
```
|
||||
|
||||
@@ -76,12 +78,14 @@ The driver logs show gRPC registration with Manager Center on startup:
|
||||
Driver register success, service name: dc3-driver-virtual
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-virtual -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
@@ -17,7 +17,6 @@ attributes addressed by node IEEE address / endpoint / cluster / attribute, and
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-driver-zigbee
|
||||
- **Version**: 2026.5.22
|
||||
- **Driver Name**: Zigbee Driver
|
||||
|
||||
## Driver Attributes (Device-level)
|
||||
@@ -48,6 +47,9 @@ attributes addressed by node IEEE address / endpoint / cluster / attribute, and
|
||||
| Cluster ID | clusterId | INT | 0 | Cluster ID for writing |
|
||||
| Attribute ID | attributeId | INT | 0 | Attribute ID for writing |
|
||||
|
||||
The module `application.yml` is authoritative for attribute codes, types, default values, scheduling, health, and
|
||||
local buffering. Keep this README aligned when those user-facing settings change.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
A Zigbee coordinator dongle connected to a serial port on the host running the driver. The dependencies bundle the
|
||||
@@ -59,23 +61,25 @@ the driver attributes above (see the work-in-progress warning).
|
||||
### 1. Start Infrastructure and Center Services
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
java -jar dc3-center/dc3-center-manager/target/dc3-center-manager.jar
|
||||
make up-db
|
||||
make up-dev GROUP=core
|
||||
```
|
||||
|
||||
### 2. Build and Run
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-zigbee -am package
|
||||
java -jar dc3-driver/dc3-driver-zigbee/target/dc3-driver-zigbee.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-driver/dc3-driver-zigbee -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-driver` — Driver SDK for registration, scheduling, and RabbitMQ integration
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
+2
-8
@@ -10,7 +10,6 @@ storage, RabbitMQ delivery, and TimescaleDB hypertables.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-e2e
|
||||
- **Version**: 2026.5.22
|
||||
- **Packaging**: jar (test sources only)
|
||||
|
||||
## Test Suites
|
||||
@@ -34,16 +33,11 @@ make test-e2e
|
||||
# = DC3_E2E=true mvn -s .mvn/settings.xml -B -Dmaven.test.skip=false -Dskip.unit.tests=true -pl dc3-e2e -am -Pe2e verify
|
||||
```
|
||||
|
||||
Requires a container runtime (`podman`) for the Testcontainers-backed dependencies provided by `dc3-common-test`.
|
||||
Requires a Docker-compatible container runtime for the Testcontainers-backed dependencies provided by
|
||||
`dc3-common-test`.
|
||||
|
||||
## Dependencies
|
||||
|
||||
- `dc3-common-test` — Testcontainers and test harnesses
|
||||
- `dc3-common-model` — domain models
|
||||
- `rest-assured` — HTTP assertions
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
+11
-11
@@ -10,7 +10,6 @@ routing, and reverse proxying.
|
||||
|
||||
- **Group ID**: io.github.pnoker
|
||||
- **Artifact ID**: dc3-gateway
|
||||
- **Version**: 2026.5.22
|
||||
- **Package**: `io.github.pnoker.gateway`
|
||||
|
||||
## Service Ports
|
||||
@@ -73,30 +72,31 @@ Route definitions and the auth gRPC channel are shared in `dc3-common-gateway`'s
|
||||
### 1. Start Infrastructure
|
||||
|
||||
```bash
|
||||
podman compose -f dc3/docker-compose-db.yml up -d
|
||||
make up-db
|
||||
```
|
||||
|
||||
### 2. Build
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml clean package
|
||||
mvn -s .mvn/settings.xml -pl dc3-gateway -am package
|
||||
```
|
||||
|
||||
### 3. Run (start first before any center service)
|
||||
### 3. Run after the required center services are available
|
||||
|
||||
```bash
|
||||
java -jar dc3-gateway/target/dc3-gateway.jar
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
Run the module tests from the repository root:
|
||||
|
||||
```bash
|
||||
mvn -s .mvn/settings.xml -pl dc3-gateway -am test
|
||||
```
|
||||
|
||||
## Related Modules
|
||||
|
||||
- `dc3-common-gateway` — `Authentic` filter implementation and gateway utilities
|
||||
- `dc3-api-auth` — gRPC API contracts for token validation
|
||||
- `dc3-center-auth` — Token validation backend
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2016-present the IoT DC3 original author or authors.
|
||||
|
||||
Licensed under the GNU Affero General Public License v3.0 (AGPL 3.0)
|
||||
|
||||
|
||||
+38
-21
@@ -1,34 +1,51 @@
|
||||
## 1. Prepare
|
||||
# DC3 Web
|
||||
|
||||
- `git`
|
||||
- `Visual Studio Code`
|
||||
- `nodejs` >= 22 (enforced by `engines` in `package.json`)
|
||||
- `pnpm` 11.3.0 (pinned via `packageManager`), install using
|
||||
`corepack enable && corepack prepare pnpm@11.3.0 --activate`
|
||||
`dc3-web` is the Vue and TypeScript management frontend for IoT DC3. It communicates with the backend exclusively
|
||||
through `dc3-gateway`.
|
||||
|
||||
## 2. Source code
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 22 or newer, as declared by `engines` in `package.json`.
|
||||
- Corepack enabled.
|
||||
- The pnpm version declared by `packageManager` in `package.json`.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/pnoker/iot-dc3.git
|
||||
corepack enable
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## 3. Develop
|
||||
Use pnpm only. Do not generate npm or Yarn lockfiles. When changing the package-manager version, keep `package.json` and
|
||||
the Dockerfile toolchain pin aligned.
|
||||
|
||||
## Develop
|
||||
|
||||
```bash
|
||||
cd iot-dc3/dc3-web
|
||||
|
||||
# install
|
||||
pnpm install
|
||||
|
||||
# run
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
The dev server runs on `http://localhost:8080` and proxies API calls to the backend gateway (`http://localhost:8000`),
|
||||
so start the backend stack first.
|
||||
The development server uses the port and API proxy configured by `vite.config.ts` and `src/config/env/`. Its defaults
|
||||
are `http://localhost:8080` for the UI and `http://localhost:8000` for the gateway. The UI can start without the backend,
|
||||
but login and data requests require a running gateway and center services.
|
||||
|
||||
## 4. More
|
||||
## Build and verify
|
||||
|
||||
For the full command surface (build, type-check, lint, unit/component/E2E tests), the tech stack, environment
|
||||
configuration (`src/config/env/`), and project conventions, see
|
||||
[`AGENTS.md`](./AGENTS.md).
|
||||
```bash
|
||||
pnpm check
|
||||
pnpm lint:check
|
||||
pnpm test:guard
|
||||
pnpm test:ci
|
||||
pnpm build
|
||||
```
|
||||
|
||||
Run focused suites with `pnpm test:unit`, `pnpm test:api`, `pnpm test:component`, or `pnpm test:views`. Browser workflows
|
||||
use `pnpm test:e2e`; see [tests/README.md](./tests/README.md) for the test layers and fixture policy.
|
||||
|
||||
## Project conventions
|
||||
|
||||
- Vite environment files live under `src/config/env/` and use the `APP_` prefix.
|
||||
- Java 64-bit IDs are represented as strings and decoded with the existing JSONBigInt support.
|
||||
- Type-only imports must use `import type` because `verbatimModuleSyntax` is enabled.
|
||||
- API wrapper names mirror backend cardinality: `getXxx` for one result and `listXxx` for collections/pages/maps.
|
||||
- Every router-guard branch must settle navigation.
|
||||
|
||||
Repository-wide architecture, commit, and verification rules are in [../AGENTS.md](../AGENTS.md).
|
||||
|
||||
Reference in New Issue
Block a user