Began Framework start
This commit is contained in:
7
.claude/settings.local.json
Normal file
7
.claude/settings.local.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(find c:/Git/framework-ignition-docker/ignition -type f -name *)"
|
||||
]
|
||||
}
|
||||
}
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -25,6 +25,7 @@ ignition/data/
|
||||
# Test results (generated output, not source)
|
||||
testing/results/
|
||||
|
||||
|
||||
# IDE / Editor
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
16
CLAUDE.md
16
CLAUDE.md
@@ -14,6 +14,22 @@ The PLC I/O Testing Platform is the first project built on this framework.
|
||||
- Jython 2.7 inside Ignition; Python 3.10+ for external tooling
|
||||
- Claude Code on the Linux host (VS Code Remote to Docker host)
|
||||
|
||||
|
||||
## API Key / Secrets Policy
|
||||
|
||||
**Source of truth**: `~/.config/ignition-dev/secrets.env` (chmod 600, never committed)
|
||||
**Template**: `.env.example` in repo root — update this when adding new secrets
|
||||
|
||||
### Rules
|
||||
- All secrets via environment variables — no hardcoded values in any file
|
||||
- Docker Compose references host env vars: `VAR=${VAR}` pattern
|
||||
- Python scripts use `python-dotenv` + `os.environ["KEY"]` (loud failure on missing)
|
||||
- `.env` at project root is a symlink to secrets file — listed in .gitignore
|
||||
- CI secrets live in Gitea repository secrets settings
|
||||
|
||||
### Required Variables
|
||||
See `.env.example` for full list.
|
||||
|
||||
## Language Rules
|
||||
|
||||
### Jython 2.7 (Inside Ignition)
|
||||
|
||||
64
README.md
64
README.md
@@ -15,7 +15,69 @@ Reusable scaffold for Ignition SCADA + Docker projects, designed to work with Cl
|
||||
- Traefik v3 (optional reverse proxy)
|
||||
- Gitea for source control
|
||||
|
||||
## Getting Started
|
||||
## First-Time Setup
|
||||
|
||||
### Prerequisites
|
||||
- Docker + Docker Compose installed on the host (Ubuntu 24 recommended)
|
||||
- Git repo cloned to the host machine
|
||||
|
||||
### 1. Create the secrets file
|
||||
|
||||
```bash
|
||||
cp docker/gw-secret/GATEWAY_ADMIN_PASSWORD.example docker/gw-secret/GATEWAY_ADMIN_PASSWORD
|
||||
# Edit the file and set a real password — this file is gitignored
|
||||
nano docker/gw-secret/GATEWAY_ADMIN_PASSWORD
|
||||
```
|
||||
|
||||
### 2. Create the environment file
|
||||
|
||||
```bash
|
||||
cp docker/.env.example docker/.env
|
||||
# Edit values as needed (Ignition version, memory, hostname, Postgres password)
|
||||
nano docker/.env
|
||||
```
|
||||
|
||||
Key variables in `.env`:
|
||||
|
||||
| Variable | Default | Description |
|
||||
|---|---|---|
|
||||
| `IGNITION_VERSION` | `8.3.3` | Ignition image version |
|
||||
| `GATEWAY_MAX_MEMORY` | `8192` | Gateway JVM heap in MB |
|
||||
| `GATEWAY_NAME` | `framework` | Gateway name shown in designer |
|
||||
| `GATEWAY_HOSTNAME` | `ignition.localhost` | Public hostname (Traefik routing) |
|
||||
| `POSTGRES_PASSWORD` | `changeme` | PostgreSQL password |
|
||||
|
||||
### 3. Build and start the stack
|
||||
|
||||
```bash
|
||||
cd docker
|
||||
docker compose build # builds the custom Ignition image
|
||||
docker compose up -d # starts all services in background
|
||||
```
|
||||
|
||||
### 4. Verify services are healthy
|
||||
|
||||
```bash
|
||||
docker compose ps # all services should show "healthy" or "running"
|
||||
curl -s http://localhost:8088/StatusPing # should return "RUNNING"
|
||||
```
|
||||
|
||||
### 5. Open the gateway
|
||||
|
||||
- Ignition gateway: http://localhost:8088
|
||||
- Traefik dashboard: http://localhost:8080
|
||||
- Via hostname (requires local DNS or /etc/hosts): http://ignition.localhost
|
||||
|
||||
> **Note:** On first boot the gateway skips the setup wizard (`commissioning.json` pre-commissions it).
|
||||
> Log in with username `admin` and the password from `gw-secret/GATEWAY_ADMIN_PASSWORD`.
|
||||
|
||||
### 6. Connect Ignition Designer
|
||||
|
||||
Open Ignition Designer Launcher, add gateway at `http://<host-ip>:8088`, and open the **Framework** project. The project files in `ignition/project/` are live-mounted — changes saved in Designer write directly to Git-tracked files.
|
||||
|
||||
---
|
||||
|
||||
## Development
|
||||
|
||||
See [CLAUDE.md](CLAUDE.md) for project directives, canonical patterns, and directory layout.
|
||||
|
||||
|
||||
2
docker/.gitignore
vendored
Normal file
2
docker/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.env
|
||||
gw-secret/GATEWAY_ADMIN_PASSWORD
|
||||
9
docker/config/ignition/gateway.xml
Normal file
9
docker/config/ignition/gateway.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.1" encoding="UTF-8"?>
|
||||
<!--
|
||||
Ignition gateway configuration backup.
|
||||
Mount this file read-only for initial config seeding only.
|
||||
After first boot, Ignition manages its own config — do not overwrite a live gateway.xml.
|
||||
|
||||
To generate this file: Gateway > Config > Backup/Restore > Download Backup
|
||||
-->
|
||||
<ConfigurationUpdate />
|
||||
19
docker/config/modbus/example-pumps.json
Normal file
19
docker/config/modbus/example-pumps.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"server": {
|
||||
"host": "0.0.0.0",
|
||||
"port": 5020
|
||||
},
|
||||
"registers": {
|
||||
"holding": {
|
||||
"0": 0,
|
||||
"1": 0,
|
||||
"2": 0,
|
||||
"3": 0,
|
||||
"4": 0
|
||||
},
|
||||
"coils": {
|
||||
"0": false,
|
||||
"1": false
|
||||
}
|
||||
}
|
||||
}
|
||||
10
docker/config/postgres/init.sql
Normal file
10
docker/config/postgres/init.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- PostgreSQL initialization script.
|
||||
-- Runs ONCE on first container start when the data volume is empty.
|
||||
-- Add schema, extensions, and seed data here.
|
||||
|
||||
-- Enable useful extensions
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
|
||||
|
||||
-- Ignition stores its own schema; this file is for project-specific tables.
|
||||
-- Add project tables below this line.
|
||||
10
docker/config/traefik/dynamic/README.md
Normal file
10
docker/config/traefik/dynamic/README.md
Normal file
@@ -0,0 +1,10 @@
|
||||
# Traefik Dynamic Configuration
|
||||
|
||||
Place `.yml` files here for dynamic routing rules, middleware, and TLS configuration.
|
||||
Traefik watches this directory and reloads automatically — no restart required.
|
||||
|
||||
## Examples
|
||||
|
||||
- `tls.yml` — TLS certificates and stores
|
||||
- `middlewares.yml` — reusable middleware (auth, rate limiting, headers)
|
||||
- `routers.yml` — additional route rules beyond Docker labels
|
||||
13
docker/config/traefik/dynamic/ignition.yml
Normal file
13
docker/config/traefik/dynamic/ignition.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
http:
|
||||
routers:
|
||||
ignition:
|
||||
entryPoints:
|
||||
- web
|
||||
rule: "Host(`ignition.localhost`)"
|
||||
service: ignition
|
||||
|
||||
services:
|
||||
ignition:
|
||||
loadBalancer:
|
||||
servers:
|
||||
- url: "http://ignition:8088"
|
||||
19
docker/config/traefik/traefik.yml
Normal file
19
docker/config/traefik/traefik.yml
Normal file
@@ -0,0 +1,19 @@
|
||||
api:
|
||||
dashboard: true
|
||||
insecure: true # Dashboard on :8080 — restrict in production
|
||||
|
||||
entryPoints:
|
||||
web:
|
||||
address: ":80"
|
||||
websecure:
|
||||
address: ":443"
|
||||
|
||||
providers:
|
||||
docker:
|
||||
exposedByDefault: false
|
||||
file:
|
||||
directory: /etc/traefik/dynamic
|
||||
watch: true
|
||||
|
||||
log:
|
||||
level: INFO
|
||||
16
docker/docker-compose.override.yml
Normal file
16
docker/docker-compose.override.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
# Project-specific service additions and overrides.
|
||||
# Add Modbus simulators and other project-specific containers here.
|
||||
# Do NOT modify docker-compose.yml directly for per-project changes.
|
||||
#
|
||||
# Example Modbus simulator:
|
||||
#
|
||||
# services:
|
||||
# modbus-sim-pumps:
|
||||
# image: oitc/modbus-server:latest
|
||||
# ports:
|
||||
# - "5020:5020"
|
||||
# volumes:
|
||||
# - ./config/modbus/pumps.json:/app/config.json
|
||||
# restart: unless-stopped
|
||||
|
||||
services: {}
|
||||
118
docker/docker-compose.yml
Normal file
118
docker/docker-compose.yml
Normal file
@@ -0,0 +1,118 @@
|
||||
x-default-logging: &default-logging
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "100m"
|
||||
max-file: "5"
|
||||
|
||||
x-ignition-opts: &ignition-opts
|
||||
<<: *default-logging
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
IGNITION_VERSION: ${IGNITION_VERSION:-8.3.3}
|
||||
dockerfile: ./gw-build/Dockerfile
|
||||
image: framework-ignition:${IGNITION_VERSION:-8.3.3}
|
||||
env_file: gw-init/gateway.env
|
||||
secrets:
|
||||
- gateway-admin-password
|
||||
|
||||
name: framework
|
||||
|
||||
services:
|
||||
ignition:
|
||||
<<: *ignition-opts
|
||||
container_name: ignition
|
||||
pull_policy: missing
|
||||
depends_on:
|
||||
traefik:
|
||||
condition: service_healthy
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
command: >
|
||||
-n ${GATEWAY_NAME:-framework} -m ${GATEWAY_MAX_MEMORY:-1024}
|
||||
ports:
|
||||
- "8088:8088"
|
||||
- "8043:8043"
|
||||
- "62541:62541"
|
||||
- "1883:1883"
|
||||
volumes:
|
||||
- ignition-data:/usr/local/bin/ignition/data
|
||||
- ./gw-config:/usr/local/bin/ignition/data/config:rw
|
||||
- ./gw-commission/commissioning.json:/usr/local/bin/ignition/data/commissioning.json:ro
|
||||
- ../ignition/project:/usr/local/bin/ignition/data/projects/framework:rw
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:8088/StatusPing"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 60s
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.ignition.entrypoints=web"
|
||||
- "traefik.http.routers.ignition.rule=Host(`${GATEWAY_HOSTNAME:-ignition.localhost}`)"
|
||||
- "traefik.http.services.ignition.loadbalancer.server.port=8088"
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
|
||||
postgres:
|
||||
<<: *default-logging
|
||||
image: postgres:16-alpine
|
||||
container_name: postgres
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
- ./config/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
||||
environment:
|
||||
POSTGRES_DB: ignition
|
||||
POSTGRES_USER: ignition
|
||||
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ignition"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
|
||||
traefik:
|
||||
<<: *default-logging
|
||||
image: traefik:v3
|
||||
container_name: traefik
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8080:8080"
|
||||
command:
|
||||
- --configFile=/etc/traefik/traefik.yml
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- ./config/traefik/traefik.yml:/etc/traefik/traefik.yml:ro
|
||||
- ./config/traefik/dynamic:/etc/traefik/dynamic:ro
|
||||
healthcheck:
|
||||
test: ["CMD", "traefik", "healthcheck", "--ping"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 5s
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.traefik.entrypoints=web"
|
||||
- "traefik.http.routers.traefik.rule=Host(`traefik.localhost`)"
|
||||
- "traefik.http.routers.traefik.service=api@internal"
|
||||
networks:
|
||||
- proxy
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
|
||||
secrets:
|
||||
gateway-admin-password:
|
||||
file: gw-secret/GATEWAY_ADMIN_PASSWORD
|
||||
|
||||
volumes:
|
||||
ignition-data:
|
||||
postgres-data:
|
||||
17
docker/gw-build/Dockerfile
Normal file
17
docker/gw-build/Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
ARG IGNITION_VERSION=8.3.3
|
||||
FROM inductiveautomation/ignition:${IGNITION_VERSION}
|
||||
|
||||
USER root
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
iputils-ping \
|
||||
htop \
|
||||
nano \
|
||||
net-tools \
|
||||
traceroute \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Uncomment to install third-party modules:
|
||||
# COPY modules/*.modl /usr/local/bin/ignition/user-lib/modules/
|
||||
|
||||
EXPOSE 8088 8043 62541 1883
|
||||
5
docker/gw-commission/commissioning.json
Normal file
5
docker/gw-commission/commissioning.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"connections.useSsl": "false",
|
||||
"eulaSetup.eula": "B3RM3rHPH6fHm8owWAEx/YnCk04FsYkXTDX8DOl4zQI=",
|
||||
"isCommissioned": "COMMISSIONED"
|
||||
}
|
||||
13
docker/gw-config/.gitignore
vendored
Normal file
13
docker/gw-config/.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# Ignition runtime-generated gateway config — do not commit
|
||||
local/
|
||||
resources/
|
||||
certificates/
|
||||
keystore/
|
||||
*.idb
|
||||
db/
|
||||
metricsdb/
|
||||
autobackup/
|
||||
jar-cache/
|
||||
*.log
|
||||
logs/
|
||||
.resources/
|
||||
0
docker/gw-config/.gitkeep
Normal file
0
docker/gw-config/.gitkeep
Normal file
8
docker/gw-init/gateway.env
Normal file
8
docker/gw-init/gateway.env
Normal file
@@ -0,0 +1,8 @@
|
||||
ACCEPT_IGNITION_EULA=Y
|
||||
GATEWAY_ADMIN_USERNAME=admin
|
||||
GATEWAY_ADMIN_PASSWORD_FILE=/run/secrets/gateway-admin-password
|
||||
GATEWAY_PUBLIC_ADDRESS=${GATEWAY_HOSTNAME}
|
||||
IGNITION_EDITION=standard
|
||||
TZ=America/Chicago
|
||||
GATEWAY_MODULES_ENABLED=all
|
||||
DISABLE_QUICKSTART=true
|
||||
1
docker/gw-secret/GATEWAY_ADMIN_PASSWORD.example
Normal file
1
docker/gw-secret/GATEWAY_ADMIN_PASSWORD.example
Normal file
@@ -0,0 +1 @@
|
||||
changeme
|
||||
44
ignition/.gitignore
vendored
Normal file
44
ignition/.gitignore
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
*.gwbk
|
||||
my-db/
|
||||
frontend-gateway/config/resources/.resources
|
||||
backend-gateway/config/resources/.resources
|
||||
|
||||
|
||||
# Database files
|
||||
**/db/
|
||||
**/metricsdb/
|
||||
**/autobackup/
|
||||
**/db_backup_sqlite.idb
|
||||
**/valueStore.idb
|
||||
|
||||
# Cache and temporary files
|
||||
**/jar-cache/
|
||||
**/request
|
||||
**/response
|
||||
*.tmp
|
||||
*.bak
|
||||
**/var
|
||||
|
||||
# Log files
|
||||
*.log
|
||||
**/logs
|
||||
|
||||
# Certificates and security
|
||||
**/certificates/
|
||||
**/keystore/
|
||||
|
||||
# Runtime configuration (environment-specific)
|
||||
**/config/local
|
||||
**/config/resources/local
|
||||
|
||||
# Gateway-specific runtime files
|
||||
**/.container-init.conf
|
||||
|
||||
# Backup and converted files
|
||||
**/conversion-report.txt
|
||||
**.digest.json
|
||||
|
||||
# Project conversion artifacts
|
||||
**/projects/conversion-report.txt
|
||||
**/migration-log-*.md
|
||||
**/.resources/
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"pages": {
|
||||
"/": {
|
||||
"title": "Main",
|
||||
"viewPath": "Page/Main"
|
||||
}
|
||||
},
|
||||
"sharedDocks": {
|
||||
"cornerPriority": "top-bottom",
|
||||
"left": [],
|
||||
"top": []
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "G",
|
||||
"version": 1
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"custom": {},
|
||||
"general": {
|
||||
"navigation": {
|
||||
"enableHistoryNavigation": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"files": [
|
||||
"props.json"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "G",
|
||||
"version": 1
|
||||
}
|
||||
9
ignition/project/ignition/global-props/resource.json
Normal file
9
ignition/project/ignition/global-props/resource.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"files": [
|
||||
"props.json"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "G",
|
||||
"version": 1
|
||||
}
|
||||
0
ignition/project/ignition/named-query/.gitkeep
Normal file
0
ignition/project/ignition/named-query/.gitkeep
Normal file
21
ignition/project/ignition/script-python/devices/code.py
Normal file
21
ignition/project/ignition/script-python/devices/code.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# env: Jython 2.7 (Ignition — gateway/client script library)
|
||||
# Access via: project.devices.<function>()
|
||||
|
||||
|
||||
def getStatus(deviceTagPath):
|
||||
"""
|
||||
Read current status tags for a device UDT instance.
|
||||
deviceTagPath: str — path to the device UDT root tag
|
||||
Returns: dict with device status values
|
||||
"""
|
||||
raise NotImplementedError("getStatus not yet implemented")
|
||||
|
||||
|
||||
def sendCommand(deviceTagPath, command, value=True):
|
||||
"""
|
||||
Write a command to a device UDT instance.
|
||||
deviceTagPath: str — path to the device UDT root tag
|
||||
command: str — command member name (e.g. 'Start', 'Stop')
|
||||
value: bool/int/float — value to write
|
||||
"""
|
||||
raise NotImplementedError("sendCommand not yet implemented")
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"attributes": {
|
||||
"hintScope": 2
|
||||
},
|
||||
"files": [
|
||||
"code.py"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "A",
|
||||
"version": 1
|
||||
}
|
||||
22
ignition/project/ignition/script-python/testing/code.py
Normal file
22
ignition/project/ignition/script-python/testing/code.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# env: Jython 2.7 (Ignition — gateway/client script library)
|
||||
# Access via: project.testing.<function>()
|
||||
|
||||
|
||||
def runScenario(scenarioPath):
|
||||
"""
|
||||
Load and execute a test scenario from the given path.
|
||||
scenarioPath: str — path to scenario JSON file or scenario ID
|
||||
Returns: dict with keys 'passed', 'results', 'errors'
|
||||
"""
|
||||
raise NotImplementedError("runScenario not yet implemented")
|
||||
|
||||
|
||||
def validateResults(expected, actual, tolerance=0.0):
|
||||
"""
|
||||
Compare actual tag values against expected outcomes.
|
||||
expected: dict — {tagPath: expectedValue}
|
||||
actual: dict — {tagPath: actualValue}
|
||||
tolerance: float — allowable numeric deviation
|
||||
Returns: dict with keys 'passed', 'failures'
|
||||
"""
|
||||
raise NotImplementedError("validateResults not yet implemented")
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"attributes": {
|
||||
"hintScope": 2
|
||||
},
|
||||
"files": [
|
||||
"code.py"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "A",
|
||||
"version": 1
|
||||
}
|
||||
29
ignition/project/ignition/script-python/util/code.py
Normal file
29
ignition/project/ignition/script-python/util/code.py
Normal file
@@ -0,0 +1,29 @@
|
||||
# env: Jython 2.7 (Ignition — gateway/client script library)
|
||||
# Access via: project.util.<function>()
|
||||
import json
|
||||
import system
|
||||
|
||||
|
||||
def formatTag(tagPath, value):
|
||||
"""
|
||||
Format a tag value for display or logging.
|
||||
tagPath: str — tag path (used for context)
|
||||
value: any — raw tag value
|
||||
Returns: str
|
||||
"""
|
||||
return "{}: {}".format(tagPath, value)
|
||||
|
||||
|
||||
def validateJson(jsonStr):
|
||||
"""
|
||||
Parse and validate a JSON string.
|
||||
jsonStr: str — JSON text to validate
|
||||
Returns: parsed object on success
|
||||
Raises: ValueError on invalid JSON
|
||||
"""
|
||||
try:
|
||||
return json.loads(jsonStr)
|
||||
except ValueError as e:
|
||||
logger = system.util.getLogger("util")
|
||||
logger.error("Invalid JSON: {}".format(str(e)))
|
||||
raise
|
||||
12
ignition/project/ignition/script-python/util/resource.json
Normal file
12
ignition/project/ignition/script-python/util/resource.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"attributes": {
|
||||
"hintScope": 2
|
||||
},
|
||||
"files": [
|
||||
"code.py"
|
||||
],
|
||||
"overridable": true,
|
||||
"restricted": false,
|
||||
"scope": "A",
|
||||
"version": 1
|
||||
}
|
||||
7
ignition/project/project.json
Normal file
7
ignition/project/project.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"description": "",
|
||||
"enabled": true,
|
||||
"inheritable": false,
|
||||
"parent": "",
|
||||
"title": "Framework"
|
||||
}
|
||||
44
reference/Docker/.gitignore
vendored
Normal file
44
reference/Docker/.gitignore
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
*.gwbk
|
||||
my-db/
|
||||
frontend-gateway/config/resources/.resources
|
||||
backend-gateway/config/resources/.resources
|
||||
|
||||
|
||||
# Database files
|
||||
**/db/
|
||||
**/metricsdb/
|
||||
**/autobackup/
|
||||
**/db_backup_sqlite.idb
|
||||
**/valueStore.idb
|
||||
|
||||
# Cache and temporary files
|
||||
**/jar-cache/
|
||||
**/request
|
||||
**/response
|
||||
*.tmp
|
||||
*.bak
|
||||
**/var
|
||||
|
||||
# Log files
|
||||
*.log
|
||||
**/logs
|
||||
|
||||
# Certificates and security
|
||||
**/certificates/
|
||||
**/keystore/
|
||||
|
||||
# Runtime configuration (environment-specific)
|
||||
**/config/local
|
||||
**/config/resources/local
|
||||
|
||||
# Gateway-specific runtime files
|
||||
**/.container-init.conf
|
||||
|
||||
# Backup and converted files
|
||||
**/conversion-report.txt
|
||||
**.digest.json
|
||||
|
||||
# Project conversion artifacts
|
||||
**/projects/conversion-report.txt
|
||||
**/migration-log-*.md
|
||||
**/.resources/
|
||||
0
reference/Docker/.gitmodules
vendored
Normal file
0
reference/Docker/.gitmodules
vendored
Normal file
86
reference/Docker/docker-compose.yml
Normal file
86
reference/Docker/docker-compose.yml
Normal file
@@ -0,0 +1,86 @@
|
||||
version: "3.8"
|
||||
|
||||
x-default-logging: &default-logging
|
||||
logging:
|
||||
options:
|
||||
max-size: "100m"
|
||||
max-file: "5"
|
||||
driver: json-file
|
||||
|
||||
x-ignition-opts: &ignition-opts
|
||||
<<: *default-logging
|
||||
image: inductiveautomation/ignition:${IGNITION_VERSION:-latest}
|
||||
env_file: gw-init/gateway.env
|
||||
secrets:
|
||||
- gateway-admin-password
|
||||
|
||||
name: PCTest
|
||||
services:
|
||||
pctp-proxy:
|
||||
image: traefik:v2.11
|
||||
container_name: pctp-proxy
|
||||
restart: always
|
||||
ports:
|
||||
- 80:80
|
||||
command:
|
||||
- --configFile=/etc/traefik/traefik.yml
|
||||
labels:
|
||||
traefik.enable: "true"
|
||||
traefik.http.routers.pctp-proxy.entrypoints: "web"
|
||||
traefik.http.routers.pctp-proxy.rule: "Host(`pctp-proxy.localtest.me`)"
|
||||
traefik.http.routers.pctp-proxy.service: "api@internal"
|
||||
volumes:
|
||||
- ./traefik-config/traefik.yml:/etc/traefik/traefik.yml:ro
|
||||
- ./traefik-config/dynamic.yml:/etc/traefik/dynamic.yml:ro
|
||||
networks:
|
||||
- proxy
|
||||
healthcheck:
|
||||
test: [ "CMD", "traefik", "healthcheck", "--ping" ]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 5s
|
||||
PCTPgateway:
|
||||
depends_on:
|
||||
pctp-proxy:
|
||||
condition: service_healthy
|
||||
<<: *ignition-opts
|
||||
build:
|
||||
context: .
|
||||
args:
|
||||
- IGNITION_VERSION=${IGNITION_VERSION:-8.3.2}
|
||||
dockerfile: ./gw-build/Dockerfile # Edit this file to add new third party modules
|
||||
user: 0:0
|
||||
container_name: PCTPgateway
|
||||
pull_policy: missing
|
||||
labels:
|
||||
traefik.enable: "true"
|
||||
traefik.http.routers.PCTPgateway.entrypoints: "web"
|
||||
traefik.http.routers.PCTPgateway.rule: "Host(`${GATEWAY1_HOSTNAME}`)"
|
||||
traefik.http.services.PCTPgateway.loadbalancer.server.port: "8088"
|
||||
ports:
|
||||
- 8088:8088 # Main Ignition Web Port
|
||||
- 1883:1883 # Main MQTT Port
|
||||
- 8060:8060 # Main Ignition Gateway Port
|
||||
# Reference Ignition Documentation for reference to these commands and their uses.
|
||||
command: >
|
||||
-n PCTestingPlatform -m ${GATEWAY_MAX_MEMORY:-1024}
|
||||
volumes:
|
||||
- ./projects:/usr/local/bin/ignition/data/projects:rw
|
||||
- ./gw-config:/usr/local/bin/ignition/data/config:rw
|
||||
- ./gw-commission/commissioning.json:/usr/local/bin/ignition/data/commissioning.json
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
# external: true
|
||||
|
||||
secrets:
|
||||
gateway-admin-password:
|
||||
file: gw-secret/GATEWAY_ADMIN_PASSWORD
|
||||
|
||||
volumes:
|
||||
logs:
|
||||
driver: local
|
||||
21
reference/Docker/gw-build/Dockerfile
Normal file
21
reference/Docker/gw-build/Dockerfile
Normal file
@@ -0,0 +1,21 @@
|
||||
# Use the official Ignition image
|
||||
ARG IGNITION_VERSION=8.3.2
|
||||
FROM inductiveautomation/ignition:${IGNITION_VERSION}
|
||||
|
||||
# COPY ./gw-build/Tag-CICD.modl /usr/local/bin/ignition/user-lib/modules/
|
||||
#COPY ./gw-build/MQTT-Distributor-signed.modl /usr/local/bin/ignition/user-lib/modules/
|
||||
|
||||
USER root
|
||||
|
||||
# Update the package list and install utilities
|
||||
RUN apt-get update && apt-get install -y \
|
||||
iputils-ping \
|
||||
htop \
|
||||
nano \
|
||||
net-tools \
|
||||
traceroute \
|
||||
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
# Expose required ports
|
||||
EXPOSE 8088 1883
|
||||
5
reference/Docker/gw-commission/commissioning.json
Normal file
5
reference/Docker/gw-commission/commissioning.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"isCommissioned": "COMMISSIONED",
|
||||
"connections.useSsl": "false",
|
||||
"eulaSetup.eula": "B3RM3rHPH6fHm8owWAEx/YnCk04FsYkXTDX8DOl4zQI="
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
90514a51-8092-4e68-bf3e-f73d1a9c8c8e
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"ackPipeline": "",
|
||||
"activePipeline": "",
|
||||
"alarmOnActivity": true,
|
||||
"alarmOnMetrics": false,
|
||||
"alarmOnTasks": true,
|
||||
"connectedClientsError": 100,
|
||||
"connectedClientsWarning": 50,
|
||||
"connectionError": 15,
|
||||
"connectionWarning": 5,
|
||||
"cpuError": 90,
|
||||
"cpuWarning": 70,
|
||||
"dbConnUtilError": 100,
|
||||
"dbConnUtilWarning": 80,
|
||||
"errPerHourError": 60,
|
||||
"errPerHourWarning": 20,
|
||||
"errPerMinError": 5,
|
||||
"errPerMinWarning": 2,
|
||||
"errorPriority": "High",
|
||||
"memError": 90,
|
||||
"memWarning": 70,
|
||||
"perspectiveSessionsError": 100,
|
||||
"perspectiveSessionsWarning": 50,
|
||||
"warningPriority": "Low"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:15Z"
|
||||
},
|
||||
"lastModificationSignature": "2d0dd4ede91ff9ee109ca4c38e38775a0ebdcaa3eb46addc636b4fb7d8bb78e0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"agentSettings": {
|
||||
"forwardLeasedLicense": false,
|
||||
"httpConnectTimeout": 10,
|
||||
"httpReadTimeout": 60,
|
||||
"sendStatsInterval": 30
|
||||
},
|
||||
"controllerSettings": {
|
||||
"archiveLocationMode": "Automatic",
|
||||
"backupRetentionAge": 0,
|
||||
"backupRetentionTimeUnit": "Days",
|
||||
"eventTableName": "agent_events",
|
||||
"lowDiskThresholdMB": 1024,
|
||||
"maxRetainedBackupCount": 5
|
||||
},
|
||||
"installMode": "NotInstalled"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:15Z"
|
||||
},
|
||||
"lastModificationSignature": "4d119665f7debe30d86559e6368db9496874414ab0f17c8d19342d2cbf81a040"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"defaultDeviceRolePermissionMappings": [
|
||||
{
|
||||
"permissions": [
|
||||
"Browse",
|
||||
"Read"
|
||||
],
|
||||
"role": "Anonymous"
|
||||
},
|
||||
{
|
||||
"permissions": [
|
||||
"Browse",
|
||||
"Read",
|
||||
"Write",
|
||||
"Call"
|
||||
],
|
||||
"role": "AuthenticatedUser"
|
||||
}
|
||||
],
|
||||
"defaultTagProviderRolePermissionMappings": [
|
||||
{
|
||||
"permissions": [
|
||||
"Browse",
|
||||
"Read"
|
||||
],
|
||||
"role": "Anonymous"
|
||||
},
|
||||
{
|
||||
"permissions": [
|
||||
"Browse",
|
||||
"Read",
|
||||
"Write",
|
||||
"Call"
|
||||
],
|
||||
"role": "AuthenticatedUser"
|
||||
}
|
||||
],
|
||||
"tagProviderRolePermissionMappings": {}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:13Z"
|
||||
},
|
||||
"lastModificationSignature": "e09f4a2ee6de083c3c1cc9bd81d3a1603d46e986bf579575927afc00c9dea3e4"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"profile": {
|
||||
"type": "LogixDriver"
|
||||
},
|
||||
"settings": {
|
||||
"advanced": {
|
||||
"automaticRebrowseEnabled": true,
|
||||
"cipConnectionSize": 500,
|
||||
"cipConnectionTimeout": 16000,
|
||||
"concurrentRequests": 4,
|
||||
"identityRequestFrequency": 5000,
|
||||
"slotNumber": 0
|
||||
},
|
||||
"connectivity": {
|
||||
"connectionPath": "",
|
||||
"hostname": "172.30.35.69",
|
||||
"localAddress": "",
|
||||
"port": 44818,
|
||||
"timeout": 2000
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"description": "",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "unknown",
|
||||
"timestamp": "2026-02-18T14:46:02Z"
|
||||
},
|
||||
"uuid": "44708f58-efb8-4d3b-bd10-2ed295802753",
|
||||
"lastModificationSignature": "63fd7a3af102fba27c2576ff0586704badf352b282a4f36f4c6a3b3ff975ca85"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"defaultAuthProfileCreated": true,
|
||||
"defaultOpcUaConnectionCreated": true
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "unknown",
|
||||
"timestamp": "2025-10-20T13:06:05Z"
|
||||
},
|
||||
"lastModificationSignature": "6b0dec069693bc118091cdc6e368b6c38c20c12481aa0a43e0ea144d2997a64a"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"advanced": {
|
||||
"exposedTagsEnabled": false,
|
||||
"gdsPushEnabled": false,
|
||||
"maxSessionCount": 100
|
||||
},
|
||||
"authentication": {
|
||||
"anonymousAccessAllowed": false,
|
||||
"authenticationProfile": "opcua-module"
|
||||
},
|
||||
"endpoint": {
|
||||
"bindAddresses": [
|
||||
"localhost"
|
||||
],
|
||||
"bindPort": 62541,
|
||||
"endpointAddresses": [
|
||||
"\u003chostname\u003e",
|
||||
"\u003clocalhost\u003e"
|
||||
],
|
||||
"messageSecurityModes": [
|
||||
"SignAndEncrypt"
|
||||
],
|
||||
"securityPolicies": [
|
||||
"Basic256Sha256"
|
||||
]
|
||||
},
|
||||
"redundancy": {
|
||||
"readOnlyWhenInactive": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:14Z"
|
||||
},
|
||||
"lastModificationSignature": "a4b5cf8263097ff0c91244ddb1c23158bb608ee41de0029b62d01c9f9cd5be56"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"entrypoint": "index.css",
|
||||
"isPrivate": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@import "./variables.css";
|
||||
@import "../light/fonts.css";
|
||||
@import "../dark/globals.css";
|
||||
@import "../light/app/index.css";
|
||||
@import "../light/common/index.css";
|
||||
@import "../light/designer/index.css";
|
||||
@import "../light/palette/index.css";
|
||||
@import "../dark/palette/index.css";
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"description": "The dark-cool theme for Perspective.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json",
|
||||
"index.css",
|
||||
"variables.css"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "theme-manager",
|
||||
"timestamp": "2025-10-20T13:05:12Z"
|
||||
},
|
||||
"lastModificationSignature": "0cb4f65dadeba1cd623f749481e20ac0c5b8ec25e0a615c7914d7a9fcd28dd43"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
@import "../dark/variables.css";
|
||||
|
||||
:root {
|
||||
/* Neutrals */
|
||||
--neutral-10: #121619; /* cool-100 */
|
||||
--neutral-20: #21272A; /* cool-90 */
|
||||
--neutral-30: #343A3F; /* cool-80 */
|
||||
--neutral-40: #4D5358; /* cool-70 */
|
||||
--neutral-50: #697077; /* cool-60 */
|
||||
--neutral-60: #878D96; /* cool-50 */
|
||||
--neutral-70: #A2A9B0; /* cool-40 */
|
||||
--neutral-80: #C1C7CD; /* cool-30 */
|
||||
--neutral-90: #DDE1E6; /* cool-20 */
|
||||
--neutral-100: #F2F4F8; /* cool-10 */
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"entrypoint": "index.css",
|
||||
"isPrivate": false
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
@import "./variables.css";
|
||||
@import "../light/fonts.css";
|
||||
@import "../dark/globals.css";
|
||||
@import "../light/app/index.css";
|
||||
@import "../light/common/index.css";
|
||||
@import "../light/designer/index.css";
|
||||
@import "../light/palette/index.css";
|
||||
@import "../dark/palette/index.css";
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"description": "The dark-warm theme for Perspective.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json",
|
||||
"index.css",
|
||||
"variables.css"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "theme-manager",
|
||||
"timestamp": "2025-10-20T13:05:12Z"
|
||||
},
|
||||
"lastModificationSignature": "2f2c76d6d3497ecc6adc0ab1dacf8effc208bc209d6a2613e21dd0c9808e4825"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
@import "../dark/variables.css";
|
||||
|
||||
:root {
|
||||
/* Neutrals */
|
||||
--neutral-10: #171414; /* warm-100 */
|
||||
--neutral-20: #272525; /* warm-90 */
|
||||
--neutral-30: #3C3838; /* warm-80 */
|
||||
--neutral-40: #565151; /* warm-70 */
|
||||
--neutral-50: #736F6F; /* warm-60 */
|
||||
--neutral-60: #8F8B8B; /* warm-50 */
|
||||
--neutral-70: #ADA8A8; /* warm-40 */
|
||||
--neutral-80: #CAC5C4; /* warm-30 */
|
||||
--neutral-90: #E5E0DF; /* warm-20 */
|
||||
--neutral-100: #F7F3F2; /* warm-10 */
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"entrypoint": "index.css",
|
||||
"isPrivate": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@import "./variables.css";
|
||||
@import "../light/fonts.css";
|
||||
@import "../light/globals.css";
|
||||
@import "../light/app/index.css";
|
||||
@import "../light/common/index.css";
|
||||
@import "../light/designer/index.css";
|
||||
@import "../light/palette/index.css";
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"description": "The light-cool theme for Perspective.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json",
|
||||
"index.css",
|
||||
"variables.css"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "theme-manager",
|
||||
"timestamp": "2025-10-20T13:05:12Z"
|
||||
},
|
||||
"lastModificationSignature": "36d2dcad7c80e63e91f24406e77832251df70f52d38ebf6a2f5140a7525f2226"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
@import "../light/variables.css";
|
||||
|
||||
:root {
|
||||
/* Neutrals */
|
||||
--neutral-10: #F2F4F8; /* cool-10 */
|
||||
--neutral-20: #DDE1E6; /* cool-20 */
|
||||
--neutral-30: #C1C7CD; /* cool-30 */
|
||||
--neutral-40: #A2A9B0; /* cool-40 */
|
||||
--neutral-50: #878D96; /* cool-50 */
|
||||
--neutral-60: #697077; /* cool-60 */
|
||||
--neutral-70: #4D5358; /* cool-70 */
|
||||
--neutral-80: #343A3F; /* cool-80 */
|
||||
--neutral-90: #21272A; /* cool-90 */
|
||||
--neutral-100: #121619; /* cool-100 */
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"entrypoint": "index.css",
|
||||
"isPrivate": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@import "./variables.css";
|
||||
@import "../light/fonts.css";
|
||||
@import "../light/globals.css";
|
||||
@import "../light/app/index.css";
|
||||
@import "../light/common/index.css";
|
||||
@import "../light/designer/index.css";
|
||||
@import "../light/palette/index.css";
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"scope": "G",
|
||||
"description": "The light-warm theme for Perspective.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json",
|
||||
"index.css",
|
||||
"variables.css"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "theme-manager",
|
||||
"timestamp": "2025-10-20T13:05:12Z"
|
||||
},
|
||||
"lastModificationSignature": "4433241a2a353fad351e1fe8db51837c6ca9116ee718638505c90c131ea9494e"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
@import "../light/variables.css";
|
||||
|
||||
:root {
|
||||
/* Neutrals */
|
||||
--neutral-10: #F7F3F2; /* warm-10 */
|
||||
--neutral-20: #E5E0DF; /* warm-20 */
|
||||
--neutral-30: #CAC5C4; /* warm-30 */
|
||||
--neutral-40: #ADA8A8; /* warm-40 */
|
||||
--neutral-50: #8F8B8B; /* warm-50 */
|
||||
--neutral-60: #736F6F; /* warm-60 */
|
||||
--neutral-70: #565151; /* warm-70 */
|
||||
--neutral-80: #3C3838; /* warm-80 */
|
||||
--neutral-90: #272525; /* warm-90 */
|
||||
--neutral-100: #171414; /* warm-100 */
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"chartRecordingEnabled": false,
|
||||
"pruneAge": 7,
|
||||
"pruneAgeUnits": "DAY",
|
||||
"recordingsPerChart": 5
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:12Z"
|
||||
},
|
||||
"lastModificationSignature": "eab1a639fc49e2481d87059dabc0fd1cd167631e00b6eace412114b5ead515da"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"title": "Core",
|
||||
"description": "Core collection of locally managed Gateway configuration resources",
|
||||
"enabled": true,
|
||||
"inheritable": true,
|
||||
"parent": "external"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"appIcon": null,
|
||||
"appIconName": null,
|
||||
"appIconSize": null,
|
||||
"backgroundColor": "#697077",
|
||||
"buttonColor": "#0C7BB3",
|
||||
"buttonTextColor": "#FFFFFF",
|
||||
"enabled": false,
|
||||
"favicon": null,
|
||||
"faviconName": null,
|
||||
"faviconSize": null,
|
||||
"logo": null,
|
||||
"logoName": null,
|
||||
"logoType": null,
|
||||
"textColor": "#FFFFFF"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:07Z"
|
||||
},
|
||||
"lastModificationSignature": "a41dfd09a4de967190e8fca6f87b728bf451168e5eb47388ef29917412a1c629"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"classname": "com.mysql.cj.jdbc.Driver",
|
||||
"defaultPropInstructions": "There is an extensive list of extra connection properties available for MySQL Connector/J. See \u003ca href\u003d\u0027http://dev.mysql.com/doc/connectors/en/connector-j-reference-configuration-properties.html\u0027\u003ethe documentation\u003c/a\u003e for a table describing all connection properties.\u003cbr\u003eA default \u003ctt\u003eserverTimezone\u003c/tt\u003e value (taken from the gateway) will be appended to the connection string if one is not specified.",
|
||||
"defaultProps": "zeroDateTimeBehavior\u003dCONVERT_TO_NULL;connectTimeout\u003d120000;socketTimeout\u003d120000;useSSL\u003dfalse;allowPublicKeyRetrieval\u003dtrue;rewriteBatchedStatements\u003dtrue;disableMariaDbDriver",
|
||||
"defaultTranslator": "MYSQL",
|
||||
"defaultValidationQuery": "SELECT 1",
|
||||
"type": "MYSQL",
|
||||
"urlFormat": "jdbc:mysql://localhost:3306/test",
|
||||
"urlInstructions": "\u003cbr/\u003eThe format of the MySQL connect URL is:\u003cbr\u003e\u003ccode\u003ejdbc:mysql://\u003cb\u003ehost\u003c/b\u003e:\u003cb\u003eport\u003c/b\u003e/\u003cb\u003edatabase\u003c/b\u003e\u003c/code\u003e\u003cbr\u003eWith the three parameters (in bold) \u003cul style\u003d\"list-style-type:none;margin-left:10px;\"\u003e\u003cli\u003e\u003cb\u003ehost\u003c/b\u003e: The host name or IP address of the database server.\u003c/li\u003e\u003cli\u003e\u003cb\u003eport\u003c/b\u003e: The port that the database server is running on. MySQL default port is \u003cb\u003e3306\u003c/b\u003e.\u003c/li\u003e\u003cli\u003e\u003cb\u003edatabase\u003c/b\u003e: The name of the logical database that you are connecting to on the MySQL server.\u003c/li\u003e\u003c/ul\u003e"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"description": "The official MySQL JDBC Driver, Connector/J.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"uuid": "af89f34e-7aa5-44a8-83f7-95f0ef9a16e0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"classname": "oracle.jdbc.driver.OracleDriver",
|
||||
"defaultPropInstructions": "",
|
||||
"defaultProps": "",
|
||||
"defaultTranslator": "ORACLE",
|
||||
"defaultValidationQuery": "SELECT 1 FROM DUAL",
|
||||
"type": "ORACLE",
|
||||
"urlFormat": "jdbc:oracle:thin:@localhost:1521:test",
|
||||
"urlInstructions": "\u003cbr/\u003eThe format of the Oracle connect URL is:\u003cbr/\u003e\u003ccode\u003ejdbc:oracle:thin:@\u003cb\u003ehost\u003c/b\u003e:\u003cb\u003eport\u003c/b\u003e:\u003cb\u003eSID\u003c/b\u003e\u003c/code\u003e\u003cbr/\u003eWith the three parameters (in bold) \u003cul style\u003d\"list-style-type:none;margin-left:10px;\"\u003e\u003cli\u003e\u003cb\u003ehost\u003c/b\u003e: The host name or IP address of the database server.\u003c/li\u003e\u003cli\u003e\u003cb\u003eport\u003c/b\u003e: The port that the database server is running on. Oracle\u0027s default port is \u003cb\u003e1521\u003c/b\u003e.\u003c/li\u003e\u003cli\u003e\u003cb\u003eSID\u003c/b\u003e: the system ID that identifies the database to connect to.\u003c/li\u003e\u003c/ul\u003e"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"description": "The Oracle Database JDBC driver.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"uuid": "6ee196ad-cd38-4123-bbd5-30a2c358493f"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"classname": "org.sqlite.JDBC",
|
||||
"defaultPropInstructions": "No extra connection parameters are recommended for SQLite",
|
||||
"defaultProps": "",
|
||||
"defaultTranslator": "SQLITE",
|
||||
"defaultValidationQuery": "SELECT 1",
|
||||
"type": "SQLITE",
|
||||
"urlFormat": "jdbc:sqlite:C:/Path/To/File.db",
|
||||
"urlInstructions": "\u003cbr/\u003eThe format of the SQLite connect URL is:\u003cbr/\u003e\u003ccode\u003ejdbc:sqlite:C:/Path/To/File.db\u003c/code\u003e\u003cbr/\u003e\u003ccode\u003ejdbc:sqlite:/path/on/linux/File.db\u003c/code\u003e\u003cbr/\u003e\u003cbr/\u003eUse \u003ccode\u003e${data}\u003c/code\u003e or \u003ccode\u003e${local}\u003c/code\u003e as a placeholder for the Ignition Gateway\u0027s data directory or local directory, respectively, as seen below:\u003cbr/\u003e\u003ccode\u003ejdbc:sqlite:${data}/File.db\u003c/code\u003e\u003cbr/\u003e\u003ccode\u003ejdbc:sqlite:${local}/Folder/File.db\u003c/code\u003e\u003cbr/\u003e\u003cbr/\u003eUse \u003ccode\u003ejdbc:sqlite::memory:\u003c/code\u003e for a temporary database.\u003cbr/\u003e"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"description": "Driver for the popular embedded database system.",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"uuid": "4f5eb402-1b28-4d8c-9a30-fe8e3e6a986f"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} {alterdef}",
|
||||
"alterTableColumnDef": "ADD COLUMN {columnname} {type}",
|
||||
"autoIncTypeDef": "{type} NOT NULL AUTO_INCREMENT",
|
||||
"blobType": "VARBINARY",
|
||||
"boolType": "INT",
|
||||
"columnQuoteChar": "\"",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP",
|
||||
"datetimeType": "DATETIME",
|
||||
"fetchKeyQuery": "",
|
||||
"i1Type": "INT",
|
||||
"i2Type": "INT",
|
||||
"i4Type": "INT",
|
||||
"i8Type": "BIGINT",
|
||||
"limit": "LIMIT {limit}",
|
||||
"limitClausePosition": "Back",
|
||||
"primaryKeyDef": "PRIMARY KEY ({columnname})",
|
||||
"r4Type": "FLOAT",
|
||||
"r8Type": "DOUBLE",
|
||||
"stringType": "VARCHAR(255)",
|
||||
"supportsRGK": true,
|
||||
"tableListFilter": "",
|
||||
"textType": ""
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "59209bdb-2adc-483d-939b-c602111d8f61",
|
||||
"lastModificationSignature": "c035ddd571c42f7317b1360809cb4c9fee371043291bfd07ad453a85eadcc5e6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} ADD {alterdef}",
|
||||
"alterTableColumnDef": "{columnname} {type}",
|
||||
"autoIncTypeDef": "{type} IDENTITY(1, 1)",
|
||||
"blobType": "VARBINARY",
|
||||
"boolType": "INT",
|
||||
"columnQuoteChar": "\"",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP",
|
||||
"datetimeType": "DATETIME",
|
||||
"fetchKeyQuery": "",
|
||||
"i1Type": "INT",
|
||||
"i2Type": "INT",
|
||||
"i4Type": "INT",
|
||||
"i8Type": "BIGINT",
|
||||
"limit": "TOP {limit}",
|
||||
"limitClausePosition": "Front",
|
||||
"primaryKeyDef": "PRIMARY KEY CLUSTERED ({columnname})",
|
||||
"r4Type": "FLOAT(10)",
|
||||
"r8Type": "DOUBLE PRECISION",
|
||||
"stringType": "NVARCHAR(255)",
|
||||
"supportsRGK": true,
|
||||
"tableListFilter": "",
|
||||
"textType": "NVARCHAR(MAX)"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "cc207fc7-6eae-457f-a836-9575e06c41d3",
|
||||
"lastModificationSignature": "b4d265ed39bc3090bfb30e413a3963d1fd350c9a5059abe7c620b1d7788ae1e6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} {alterdef}",
|
||||
"alterTableColumnDef": "ADD COLUMN {columnname} {type}",
|
||||
"autoIncTypeDef": "{type} NOT NULL AUTO_INCREMENT",
|
||||
"blobType": "VARBINARY",
|
||||
"boolType": "INT",
|
||||
"columnQuoteChar": "`",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP",
|
||||
"datetimeType": "DATETIME",
|
||||
"fetchKeyQuery": "",
|
||||
"i1Type": "INT",
|
||||
"i2Type": "INT",
|
||||
"i4Type": "INT",
|
||||
"i8Type": "BIGINT",
|
||||
"limit": "LIMIT {limit}",
|
||||
"limitClausePosition": "Back",
|
||||
"primaryKeyDef": "PRIMARY KEY ({columnname})",
|
||||
"r4Type": "FLOAT",
|
||||
"r8Type": "DOUBLE",
|
||||
"stringType": "VARCHAR(255)",
|
||||
"supportsRGK": true,
|
||||
"tableListFilter": "",
|
||||
"textType": "TEXT"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "9ef2c8dd-c194-4910-9bda-ceb7ab5a5cef",
|
||||
"lastModificationSignature": "a2d8271a65add0459e763a9a5da5ac345f9107b124b3b18b5bcdbaef43c0d4e6"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} ADD ({alterdef})",
|
||||
"alterTableColumnDef": "{columnname} {type}",
|
||||
"autoIncTypeDef": "{type} NOT NULL",
|
||||
"blobType": "VARBINARY",
|
||||
"boolType": "INT",
|
||||
"columnQuoteChar": "\"",
|
||||
"createAutoIncSequence": "CREATE SEQUENCE {tablename}_seq START WITH 1 INCREMENT BY 1",
|
||||
"createAutoIncTrigger": "CREATE TRIGGER {tablename}_trig \nBEFORE INSERT ON {tablename} \nREFERENCING NEW AS NEW\nFOR EACH ROW \nBEGIN \n SELECT {tablename}_seq.NEXTVAL \n INTO :NEW.{columnname} FROM DUAL;\nEND;",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP FROM DUAL",
|
||||
"datetimeType": "TIMESTAMP",
|
||||
"fetchKeyQuery": "SELECT {tablename}_seq.CURRVAL FROM DUAL",
|
||||
"i1Type": "INT",
|
||||
"i2Type": "INT",
|
||||
"i4Type": "INT",
|
||||
"i8Type": "INT",
|
||||
"limit": "ROWNUM \u003c\u003d {limit}",
|
||||
"limitClausePosition": "Wrap",
|
||||
"primaryKeyDef": "PRIMARY KEY ({columnname})",
|
||||
"r4Type": "FLOAT",
|
||||
"r8Type": "DOUBLE PRECISION",
|
||||
"stringType": "VARCHAR2(255)",
|
||||
"supportsRGK": false,
|
||||
"tableListFilter": "SYS_INFO*;*SYSTEM*;WWV*;*$*;DBA*;LOGMNR*;ORDDCM*;APEX*;ALL_SA*;DATABASE*;DV_*;GSM*;HELP;MVIEW*;ORD_*;PRODUCT_PRIVS;REDO_*;SCHEDULER_*;SERVICE*;SI_*;SQLPLUS*;SYS_*;USER_SA*;VERIFY_HISTORY;VNCR;WLM_*;XML_*;CLOUD;REGION;CHANGE_LOG*",
|
||||
"textType": "NCLOB"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "4232bf13-511c-4e57-9eb8-b3a9ef67520d",
|
||||
"lastModificationSignature": "cb24aeb5636e155629f2ebdfa8dff5e1bdefbcbfc1f39bebb07bd440cb52977a"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} {alterdef}",
|
||||
"alterTableColumnDef": "ADD COLUMN {columnname} {type}",
|
||||
"autoIncTypeDef": "SERIAL NOT NULL",
|
||||
"blobType": "BYTEA",
|
||||
"boolType": "INT",
|
||||
"columnQuoteChar": "\"",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP",
|
||||
"datetimeType": "TIMESTAMP",
|
||||
"fetchKeyQuery": "",
|
||||
"i1Type": "INT",
|
||||
"i2Type": "INT",
|
||||
"i4Type": "INT",
|
||||
"i8Type": "BIGINT",
|
||||
"limit": "LIMIT {limit}",
|
||||
"limitClausePosition": "Back",
|
||||
"primaryKeyDef": "PRIMARY KEY ({columnname})",
|
||||
"r4Type": "FLOAT",
|
||||
"r8Type": "DOUBLE PRECISION",
|
||||
"stringType": "VARCHAR(255)",
|
||||
"supportsRGK": true,
|
||||
"tableListFilter": "",
|
||||
"textType": "TEXT"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "6a71b7d7-8bec-437a-a7b7-51b07991b4d8",
|
||||
"lastModificationSignature": "fcee927e84147d6ef01d0c1ca425d7816619de89cf682657ab595d90c2087849"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"alterTable": "ALTER TABLE {tablename} {alterdef}",
|
||||
"alterTableColumnDef": "ADD COLUMN {columnname} {type}",
|
||||
"autoIncTypeDef": "INTEGER PRIMARY KEY",
|
||||
"blobType": "BLOB",
|
||||
"boolType": "INTEGER",
|
||||
"columnQuoteChar": "\"",
|
||||
"createIndex": "CREATE INDEX {indexname} ON {tablename}({columnname})",
|
||||
"createTable": "CREATE TABLE {tablename} ({creationdef}{primarykeydef})",
|
||||
"currentTimeQuery": "SELECT CURRENT_TIMESTAMP",
|
||||
"datetimeType": "TEXT",
|
||||
"fetchKeyQuery": "",
|
||||
"i1Type": "INTEGER",
|
||||
"i2Type": "INTEGER",
|
||||
"i4Type": "INTEGER",
|
||||
"i8Type": "INTEGER",
|
||||
"limit": "LIMIT {limit}",
|
||||
"limitClausePosition": "Back",
|
||||
"primaryKeyDef": "",
|
||||
"r4Type": "REAL",
|
||||
"r8Type": "REAL",
|
||||
"stringType": "TEXT",
|
||||
"supportsRGK": true,
|
||||
"tableListFilter": "",
|
||||
"textType": "TEXT"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:20Z"
|
||||
},
|
||||
"uuid": "aee9329e-7194-48e6-9217-54d7dbc20da2",
|
||||
"lastModificationSignature": "abb73132a87017752132ba272dc66f3e6a54dccfdb6a4ffdcb9cdfcc90316ccc"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"historianName": "Edge Historian",
|
||||
"projectName": "Edge",
|
||||
"visualizationName": "VISION"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "default",
|
||||
"timestamp": "2025-10-20T13:05:07Z"
|
||||
},
|
||||
"lastModificationSignature": "67cadf1521ff462a2fadf0e9438ab88c0d580aad8d55e2f00138fc285c38af9e"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"proxyRules": []
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "8.3-migration",
|
||||
"timestamp": "2025-10-20T13:05:06Z"
|
||||
},
|
||||
"lastModificationSignature": "379de83da348c0df53236575f29f2ece21334cfacec190bb81e2fbf41859794d"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"queueSettings": [
|
||||
{
|
||||
"description": "Generic Gateway Network queue",
|
||||
"friendlyName": "Default Queue",
|
||||
"maxActive": -1,
|
||||
"queueId": "_default_",
|
||||
"timeoutMillis": 60000
|
||||
},
|
||||
{
|
||||
"description": "Handles gateway network diagnostic information messages",
|
||||
"friendlyName": "Diagnostic Info Queue",
|
||||
"maxActive": -1,
|
||||
"queueId": "diagnosticInfoQueue",
|
||||
"timeoutMillis": 300000
|
||||
},
|
||||
{
|
||||
"description": "Handles results for remote service calls over the Gateway Network",
|
||||
"friendlyName": "Call Results Queue",
|
||||
"maxActive": -1,
|
||||
"queueId": "_rpcReturn_",
|
||||
"timeoutMillis": 60000
|
||||
},
|
||||
{
|
||||
"description": "Handles messages that take up to an hour to deliver",
|
||||
"friendlyName": "Long Wait Queue",
|
||||
"maxActive": -1,
|
||||
"queueId": "longWaitQueue",
|
||||
"timeoutMillis": 3600000
|
||||
},
|
||||
{
|
||||
"description": "Forwards requests through a proxy Gateway",
|
||||
"friendlyName": "Proxy Queue",
|
||||
"maxActive": -1,
|
||||
"queueId": "_proxy_",
|
||||
"timeoutMillis": 3600000
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"scope": "A",
|
||||
"version": 1,
|
||||
"restricted": false,
|
||||
"overridable": true,
|
||||
"files": [
|
||||
"config.json"
|
||||
],
|
||||
"attributes": {
|
||||
"lastModification": {
|
||||
"actor": "8.3-migration",
|
||||
"timestamp": "2025-10-20T13:05:05Z"
|
||||
},
|
||||
"lastModificationSignature": "37e4da2e07ee109e30f7aabc61a6dc1f3d065e2a4cfd6b80447666427dd3b7ac"
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user