diff --git a/.github/workflows/sync_data_schema_updates.yaml b/.github/workflows/sync_data_schema_updates.yaml new file mode 100644 index 0000000..8485408 --- /dev/null +++ b/.github/workflows/sync_data_schema_updates.yaml @@ -0,0 +1,51 @@ +name: Synchronize Repo with Data Schemas +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + paths: + - 'jsonschema/**' + - 'scripts/**' + - '.github/workflows/sync_data_schema_updates.yaml' + + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Check out repo + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Set git user and generate files + run: | + git config --global user.name 'equinix-labs@auto-commit-workflow' + git config --global user.email 'bot@equinix.noreply.github.com' + git config advice.addIgnoredFile false + git fetch + echo -e "\nThis is executing for branch: ${GITHUB_HEAD_REF##*/}." + git checkout ${GITHUB_HEAD_REF##*/} + + - name: Update Data Loaders + run: python3 ./scripts/update_data_loader.py + + - name: Update JSON Catalog + run: python3 ./scripts/generate_json_catalog.py + + - name: Update README.md + run: python3 ./scripts/generate_readme_event_catalog.py + + - name: Auto Commit Updates + run: | + git add . + echo -e "\nGit status:" + echo `git status` + cdate=`date` + cmsg="Auto commit generated client synchronization changes for Data Schema Updates - $cdate" + echo -e "\nCommit message created : $cmsg" + echo -e "\nCommitting if there are files to update in client dir:" + echo `git commit -m "$cmsg"` + echo `git push` diff --git a/.github/workflows/validate_json_schemas.yaml b/.github/workflows/validate_json_schemas.yaml new file mode 100644 index 0000000..9faf8ca --- /dev/null +++ b/.github/workflows/validate_json_schemas.yaml @@ -0,0 +1,30 @@ +name: Validate JSON Schemas Syntax +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + paths: + - 'jsonschema/**' + - 'scripts/**' + - '.github/workflows/validate_json_schemas.yaml' + + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - name: Check out repo + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Install Python requirements.txt Dependencies + run: python3 -m pip install -r ./scripts/requirements.txt + + - name: Download schema specifications + run: curl -o ./scripts/jsonschema-org-schema.json https://json-schema.org/draft-04/schema + + - name: Validate JSON Schema + run: python3 ./scripts/validate_json_schemas.py diff --git a/.gitignore b/.gitignore index c111e88..01f814d 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ # Local Setup Scripts for Repo local_helper_scripts/* + +# Python Generated Files +__pycache__ diff --git a/DataLoader.json b/DataLoader.json index 93738ed..398eef3 100644 --- a/DataLoader.json +++ b/DataLoader.json @@ -1,54 +1,185 @@ { + "access_manager": { + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, "fabric": { - "eventTypes": [ - "equinix.fabric.connection.attribute.changed", - "equinix.fabric.connection.bgpipv4_session_status.connect", - "equinix.fabric.connection.bgpipv4_session_status.established", - "equinix.fabric.connection.bgpipv4_session_status.idle", - "equinix.fabric.connection.bgpipv6_session_status.connect", - "equinix.fabric.connection.bgpipv6_session_status.established", - "equinix.fabric.connection.bgpipv6_session_status.idle", - "equinix.fabric.connection.state.deprovisioned", - "equinix.fabric.connection.state.deprovisioning", - "equinix.fabric.connection.state.pending", - "equinix.fabric.connection.state.pending_approval", - "equinix.fabric.connection.state.pending_interface_configuration", - "equinix.fabric.connection.state.provisioned", - "equinix.fabric.connection.state.provisioning", - "equinix.fabric.connection.status.down", - "equinix.fabric.connection.status.up", - "equinix.fabric.metric", - "equinix.fabric.network.state.deprovisioned", - "equinix.fabric.network.state.deprovisioning", - "equinix.fabric.network.state.provisioned", - "equinix.fabric.network.state.provisioning", - "equinix.fabric.port.state.deprovisioned", - "equinix.fabric.port.state.failed", - "equinix.fabric.port.state.provisioned", - "equinix.fabric.port.status.down", - "equinix.fabric.port.status.up", - "equinix.fabric.router.state.deprovisioned", - "equinix.fabric.router.state.deprovisioning", - "equinix.fabric.router.state.failed", - "equinix.fabric.router.state.not_deprovisioned", - "equinix.fabric.router.state.not_provisioned", - "equinix.fabric.router.state.provisioned", - "equinix.fabric.router.state.provisioning", - "equinix.fabric.router.state.reprovisioning", - "equinix.fabric.service_token.attribute.changed", - "equinix.fabric.service_token.state.deleted", - "equinix.fabric.service_token.state.inactive" - ], - "metricNames": [ - "equinix.fabric.connection.bandwidth_rx.usage", - "equinix.fabric.connection.bandwidth_tx.usage", - "equinix.fabric.metro.{:asideMetroCode}_{:zsideMetroCode}.latency", - "equinix.fabric.port.bandwidth_rx.usage", - "equinix.fabric.port.bandwidth_tx.usage", - "equinix.fabric.port.packets_dropped_rx.count", - "equinix.fabric.port.packets_dropped_tx.count", - "equinix.fabric.port.packets_erred_rx.count", - "equinix.fabric.port.packets_erred_tx.count" - ] + "cloudeventTypes": { + "released": [ + "equinix.fabric.connection.attribute.changed", + "equinix.fabric.connection.bgpipv4_session_status.connect", + "equinix.fabric.connection.bgpipv4_session_status.established", + "equinix.fabric.connection.bgpipv4_session_status.idle", + "equinix.fabric.connection.bgpipv4_session_status.open_confirm", + "equinix.fabric.connection.bgpipv4_session_status.open_sent", + "equinix.fabric.connection.bgpipv6_session_status.connect", + "equinix.fabric.connection.bgpipv6_session_status.established", + "equinix.fabric.connection.bgpipv6_session_status.idle", + "equinix.fabric.connection.ipv4_installed_routes.utilization", + "equinix.fabric.connection.ipv6_installed_routes.utilization", + "equinix.fabric.connection.state.deprovisioned", + "equinix.fabric.connection.state.deprovisioning", + "equinix.fabric.connection.state.pending", + "equinix.fabric.connection.state.provisioned", + "equinix.fabric.connection.state.provisioning", + "equinix.fabric.connection.status.down", + "equinix.fabric.connection.status.up", + "equinix.fabric.metric", + "equinix.fabric.network.state.deprovisioned", + "equinix.fabric.network.state.deprovisioning", + "equinix.fabric.network.state.provisioned", + "equinix.fabric.network.state.provisioning", + "equinix.fabric.port.state.deprovisioned", + "equinix.fabric.port.state.failed", + "equinix.fabric.port.state.provisioned", + "equinix.fabric.port.status.down", + "equinix.fabric.port.status.up", + "equinix.fabric.router.ipv4_installed_routes.utilization", + "equinix.fabric.router.ipv6_installed_routes.utilization", + "equinix.fabric.router.state.deprovisioned", + "equinix.fabric.router.state.deprovisioning", + "equinix.fabric.router.state.failed", + "equinix.fabric.router.state.not_deprovisioned", + "equinix.fabric.router.state.not_provisioned", + "equinix.fabric.router.state.provisioned", + "equinix.fabric.router.state.provisioning", + "equinix.fabric.router.state.reprovisioning", + "equinix.fabric.service_token.attribute.changed", + "equinix.fabric.service_token.state.deleted", + "equinix.fabric.service_token.state.inactive" + ], + "preview": [] + }, + "metricNames": { + "released": [ + "equinix.fabric.connection.bandwidth_rx.usage", + "equinix.fabric.connection.bandwidth_tx.usage", + "equinix.fabric.metro.am_{:metroCode}.latency", + "equinix.fabric.metro.at_{:metroCode}.latency", + "equinix.fabric.metro.ba_{:metroCode}.latency", + "equinix.fabric.metro.bg_{:metroCode}.latency", + "equinix.fabric.metro.bl_{:metroCode}.latency", + "equinix.fabric.metro.bo_{:metroCode}.latency", + "equinix.fabric.metro.bx_{:metroCode}.latency", + "equinix.fabric.metro.ca_{:metroCode}.latency", + "equinix.fabric.metro.ch_{:metroCode}.latency", + "equinix.fabric.metro.cl_{:metroCode}.latency", + "equinix.fabric.metro.cu_{:metroCode}.latency", + "equinix.fabric.metro.da_{:metroCode}.latency", + "equinix.fabric.metro.db_{:metroCode}.latency", + "equinix.fabric.metro.dc_{:metroCode}.latency", + "equinix.fabric.metro.de_{:metroCode}.latency", + "equinix.fabric.metro.dx_{:metroCode}.latency", + "equinix.fabric.metro.fr_{:metroCode}.latency", + "equinix.fabric.metro.gv_{:metroCode}.latency", + "equinix.fabric.metro.he_{:metroCode}.latency", + "equinix.fabric.metro.hh_{:metroCode}.latency", + "equinix.fabric.metro.hk_{:metroCode}.latency", + "equinix.fabric.metro.ho_{:metroCode}.latency", + "equinix.fabric.metro.il_{:metroCode}.latency", + "equinix.fabric.metro.jh_{:metroCode}.latency", + "equinix.fabric.metro.ka_{:metroCode}.latency", + "equinix.fabric.metro.kl_{:metroCode}.latency", + "equinix.fabric.metro.la_{:metroCode}.latency", + "equinix.fabric.metro.ld_{:metroCode}.latency", + "equinix.fabric.metro.lm_{:metroCode}.latency", + "equinix.fabric.metro.ls_{:metroCode}.latency", + "equinix.fabric.metro.ma_{:metroCode}.latency", + "equinix.fabric.metro.mb_{:metroCode}.latency", + "equinix.fabric.metro.md_{:metroCode}.latency", + "equinix.fabric.metro.me_{:metroCode}.latency", + "equinix.fabric.metro.mi_{:metroCode}.latency", + "equinix.fabric.metro.ml_{:metroCode}.latency", + "equinix.fabric.metro.mo_{:metroCode}.latency", + "equinix.fabric.metro.mt_{:metroCode}.latency", + "equinix.fabric.metro.mu_{:metroCode}.latency", + "equinix.fabric.metro.mx_{:metroCode}.latency", + "equinix.fabric.metro.ny_{:metroCode}.latency", + "equinix.fabric.metro.os_{:metroCode}.latency", + "equinix.fabric.metro.ot_{:metroCode}.latency", + "equinix.fabric.metro.pa_{:metroCode}.latency", + "equinix.fabric.metro.pe_{:metroCode}.latency", + "equinix.fabric.metro.ph_{:metroCode}.latency", + "equinix.fabric.metro.rj_{:metroCode}.latency", + "equinix.fabric.metro.se_{:metroCode}.latency", + "equinix.fabric.metro.sg_{:metroCode}.latency", + "equinix.fabric.metro.sk_{:metroCode}.latency", + "equinix.fabric.metro.sl_{:metroCode}.latency", + "equinix.fabric.metro.so_{:metroCode}.latency", + "equinix.fabric.metro.sp_{:metroCode}.latency", + "equinix.fabric.metro.st_{:metroCode}.latency", + "equinix.fabric.metro.sv_{:metroCode}.latency", + "equinix.fabric.metro.sy_{:metroCode}.latency", + "equinix.fabric.metro.tr_{:metroCode}.latency", + "equinix.fabric.metro.ty_{:metroCode}.latency", + "equinix.fabric.metro.va_{:metroCode}.latency", + "equinix.fabric.metro.wa_{:metroCode}.latency", + "equinix.fabric.metro.wi_{:metroCode}.latency", + "equinix.fabric.metro.zh_{:metroCode}.latency", + "equinix.fabric.port.bandwidth_rx.usage", + "equinix.fabric.port.bandwidth_tx.usage", + "equinix.fabric.port.packets_dropped_rx.count", + "equinix.fabric.port.packets_dropped_tx.count", + "equinix.fabric.port.packets_erred_rx.count", + "equinix.fabric.port.packets_erred_tx.count" + ], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + "identity": { + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + "network_edge": { + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + "resource_manager": { + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } } } diff --git a/README.md b/README.md index a47b32b..9ead2e7 100644 --- a/README.md +++ b/README.md @@ -9,76 +9,217 @@ Definitive "source of truth" for the Equinix Interconnection Observability event The following data payloads are the supported events and formats for Equinix Interconnection Observability +--- +### Equinix Access Manager ChangeEvent +#### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/access_manager/v1/ChangeEvent.json) +#### Data Type +`equinix.access_manager.v1.ChangeEvent` +#### Supported Events, Metrics, and Alerts + + + +--- ### Equinix Fabric ChangeAlert #### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/ChangeAlert.json) #### Data Type -`equinix.events.fabric.v1.ChangeAlert` -#### CloudEvent Type(s) +`equinix.fabric.v1.ChangeAlert` +#### Supported Events, Metrics, and Alerts + +--- ### Equinix Fabric ChangeEvent #### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/ChangeEvent.json) #### Data Type -`equinix.events.fabric.v1.ChangeEvent` -#### CloudEvent Type(s) -`equinix.fabric.router.state.provisioning`
-`equinix.fabric.router.state.provisioned`
-`equinix.fabric.router.state.reprovisioning`
-`equinix.fabric.router.state.deprovisioning`
-`equinix.fabric.router.state.deprovisioned`
-`equinix.fabric.router.state.failed`
-`equinix.fabric.router.state.not_provisioned`
-`equinix.fabric.router.state.not_deprovisioned`
-`equinix.fabric.port.state.provisioned`
-`equinix.fabric.port.state.deprovisioned`
-`equinix.fabric.port.state.failed`
-`equinix.fabric.port.status.up`
-`equinix.fabric.port.status.down`
-`equinix.fabric.service_token.state.inactive`
-`equinix.fabric.service_token.state.deleted`
-`equinix.fabric.service_token.attribute.changed`
-`equinix.fabric.connection.state.pending`
-`equinix.fabric.connection.state.pending_interface_configuration`
-`equinix.fabric.connection.state.provisioning`
-`equinix.fabric.connection.state.provisioned`
-`equinix.fabric.connection.state.deprovisioning`
-`equinix.fabric.connection.state.deprovisioned`
-`equinix.fabric.connection.state.pending_approval`
-`equinix.fabric.connection.attribute.changed`
-`equinix.fabric.connection.status.up`
-`equinix.fabric.connection.status.down`
-`equinix.fabric.connection.bgpipv4_session_status.established`
-`equinix.fabric.connection.bgpipv4_session_status.idle`
-`equinix.fabric.connection.bgpipv4_session_status.connect`
-`equinix.fabric.connection.bgpipv6_session_status.established`
-`equinix.fabric.connection.bgpipv6_session_status.idle`
-`equinix.fabric.connection.bgpipv6_session_status.connect`
-`equinix.fabric.network.state.provisioning`
-`equinix.fabric.network.state.provisioned`
-`equinix.fabric.network.state.deprovisioning`
-`equinix.fabric.network.state.deprovisioned` +`equinix.fabric.v1.ChangeEvent` +#### Supported Events, Metrics, and Alerts +#### Events + +
+Released + +`equinix.fabric.connection.attribute.changed`
+`equinix.fabric.connection.bgpipv4_session_status.connect`
+`equinix.fabric.connection.bgpipv4_session_status.established`
+`equinix.fabric.connection.bgpipv4_session_status.idle`
+`equinix.fabric.connection.bgpipv4_session_status.open_confirm`
+`equinix.fabric.connection.bgpipv4_session_status.open_confirm`
+`equinix.fabric.connection.bgpipv4_session_status.open_sent`
+`equinix.fabric.connection.bgpipv4_session_status.open_sent`
+`equinix.fabric.connection.bgpipv6_session_status.connect`
+`equinix.fabric.connection.bgpipv6_session_status.established`
+`equinix.fabric.connection.bgpipv6_session_status.idle`
+`equinix.fabric.connection.state.deprovisioned`
+`equinix.fabric.connection.state.deprovisioning`
+`equinix.fabric.connection.state.pending`
+`equinix.fabric.connection.state.provisioned`
+`equinix.fabric.connection.state.provisioning`
+`equinix.fabric.connection.status.down`
+`equinix.fabric.connection.status.up`
+`equinix.fabric.network.state.deprovisioned`
+`equinix.fabric.network.state.deprovisioning`
+`equinix.fabric.network.state.provisioned`
+`equinix.fabric.network.state.provisioning`
+`equinix.fabric.port.state.deprovisioned`
+`equinix.fabric.port.state.failed`
+`equinix.fabric.port.state.provisioned`
+`equinix.fabric.port.status.down`
+`equinix.fabric.port.status.up`
+`equinix.fabric.router.state.deprovisioned`
+`equinix.fabric.router.state.deprovisioning`
+`equinix.fabric.router.state.failed`
+`equinix.fabric.router.state.not_deprovisioned`
+`equinix.fabric.router.state.not_provisioned`
+`equinix.fabric.router.state.provisioned`
+`equinix.fabric.router.state.provisioning`
+`equinix.fabric.router.state.reprovisioning`
+`equinix.fabric.service_token.attribute.changed`
+`equinix.fabric.service_token.state.deleted`
+`equinix.fabric.service_token.state.inactive` + +
+ + +--- ### Equinix Fabric MetricAlert #### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/MetricAlert.json) #### Data Type -`equinix.events.fabric.v1.MetricAlert` -#### CloudEvent Type(s) +`equinix.fabric.v1.MetricAlert` +#### Supported Events, Metrics, and Alerts +#### Events + +
+Released + +`equinix.fabric.connection.ipv4_installed_routes.utilization`
+`equinix.fabric.connection.ipv6_installed_routes.utilization`
+`equinix.fabric.router.ipv4_installed_routes.utilization`
+`equinix.fabric.router.ipv6_installed_routes.utilization` + +
+ +--- ### Equinix Fabric MetricEvent #### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/MetricEvent.json) #### Data Type -`equinix.events.fabric.v1.MetricEvent` -#### CloudEvent Type(s) +`equinix.fabric.v1.MetricEvent` +#### Supported Events, Metrics, and Alerts +#### Events + +
+Released + `equinix.fabric.metric` -#### Metric Type(s) -`equinix.fabric.port.packets_erred_rx.count`
-`equinix.fabric.port.packets_erred_tx.count`
-`equinix.fabric.port.packets_dropped_rx.count`
-`equinix.fabric.port.packets_dropped_tx.count`
-`equinix.fabric.metro.{:asideMetroCode}_{:zsideMetroCode}.latency`
-`equinix.fabric.connection.bandwidth_rx.usage`
-`equinix.fabric.connection.bandwidth_tx.usage`
-`equinix.fabric.port.bandwidth_rx.usage`
-`equinix.fabric.port.bandwidth_tx.usage` + +
+ +#### Metrics + +
+Released + +`equinix.fabric.connection.bandwidth_rx.usage`
+`equinix.fabric.connection.bandwidth_tx.usage`
+`equinix.fabric.metro.am_{:metroCode}.latency`
+`equinix.fabric.metro.at_{:metroCode}.latency`
+`equinix.fabric.metro.ba_{:metroCode}.latency`
+`equinix.fabric.metro.bg_{:metroCode}.latency`
+`equinix.fabric.metro.bl_{:metroCode}.latency`
+`equinix.fabric.metro.bo_{:metroCode}.latency`
+`equinix.fabric.metro.bx_{:metroCode}.latency`
+`equinix.fabric.metro.ca_{:metroCode}.latency`
+`equinix.fabric.metro.ch_{:metroCode}.latency`
+`equinix.fabric.metro.cl_{:metroCode}.latency`
+`equinix.fabric.metro.cu_{:metroCode}.latency`
+`equinix.fabric.metro.da_{:metroCode}.latency`
+`equinix.fabric.metro.db_{:metroCode}.latency`
+`equinix.fabric.metro.dc_{:metroCode}.latency`
+`equinix.fabric.metro.de_{:metroCode}.latency`
+`equinix.fabric.metro.dx_{:metroCode}.latency`
+`equinix.fabric.metro.fr_{:metroCode}.latency`
+`equinix.fabric.metro.gv_{:metroCode}.latency`
+`equinix.fabric.metro.he_{:metroCode}.latency`
+`equinix.fabric.metro.hh_{:metroCode}.latency`
+`equinix.fabric.metro.hk_{:metroCode}.latency`
+`equinix.fabric.metro.ho_{:metroCode}.latency`
+`equinix.fabric.metro.il_{:metroCode}.latency`
+`equinix.fabric.metro.jh_{:metroCode}.latency`
+`equinix.fabric.metro.ka_{:metroCode}.latency`
+`equinix.fabric.metro.kl_{:metroCode}.latency`
+`equinix.fabric.metro.la_{:metroCode}.latency`
+`equinix.fabric.metro.ld_{:metroCode}.latency`
+`equinix.fabric.metro.lm_{:metroCode}.latency`
+`equinix.fabric.metro.ls_{:metroCode}.latency`
+`equinix.fabric.metro.ma_{:metroCode}.latency`
+`equinix.fabric.metro.mb_{:metroCode}.latency`
+`equinix.fabric.metro.md_{:metroCode}.latency`
+`equinix.fabric.metro.me_{:metroCode}.latency`
+`equinix.fabric.metro.mi_{:metroCode}.latency`
+`equinix.fabric.metro.ml_{:metroCode}.latency`
+`equinix.fabric.metro.mo_{:metroCode}.latency`
+`equinix.fabric.metro.mt_{:metroCode}.latency`
+`equinix.fabric.metro.mu_{:metroCode}.latency`
+`equinix.fabric.metro.mx_{:metroCode}.latency`
+`equinix.fabric.metro.ny_{:metroCode}.latency`
+`equinix.fabric.metro.os_{:metroCode}.latency`
+`equinix.fabric.metro.ot_{:metroCode}.latency`
+`equinix.fabric.metro.pa_{:metroCode}.latency`
+`equinix.fabric.metro.pe_{:metroCode}.latency`
+`equinix.fabric.metro.ph_{:metroCode}.latency`
+`equinix.fabric.metro.rj_{:metroCode}.latency`
+`equinix.fabric.metro.se_{:metroCode}.latency`
+`equinix.fabric.metro.sg_{:metroCode}.latency`
+`equinix.fabric.metro.sk_{:metroCode}.latency`
+`equinix.fabric.metro.sl_{:metroCode}.latency`
+`equinix.fabric.metro.so_{:metroCode}.latency`
+`equinix.fabric.metro.sp_{:metroCode}.latency`
+`equinix.fabric.metro.st_{:metroCode}.latency`
+`equinix.fabric.metro.sv_{:metroCode}.latency`
+`equinix.fabric.metro.sy_{:metroCode}.latency`
+`equinix.fabric.metro.tr_{:metroCode}.latency`
+`equinix.fabric.metro.ty_{:metroCode}.latency`
+`equinix.fabric.metro.va_{:metroCode}.latency`
+`equinix.fabric.metro.wa_{:metroCode}.latency`
+`equinix.fabric.metro.wi_{:metroCode}.latency`
+`equinix.fabric.metro.zh_{:metroCode}.latency`
+`equinix.fabric.port.bandwidth_rx.usage`
+`equinix.fabric.port.bandwidth_tx.usage`
+`equinix.fabric.port.packets_dropped_rx.count`
+`equinix.fabric.port.packets_dropped_tx.count`
+`equinix.fabric.port.packets_erred_rx.count`
+`equinix.fabric.port.packets_erred_tx.count` + +
+ + +--- +### Equinix Identity ChangeEvent +#### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/identity/v1/ChangeEvent.json) +#### Data Type +`equinix.identity.v1.ChangeEvent` +#### Supported Events, Metrics, and Alerts + + + +--- +### Equinix Network Edge ChangeEvent +#### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/network_edge/v1/ChangeEvent.json) +#### Data Type +`equinix.network_edge.v1.ChangeEvent` +#### Supported Events, Metrics, and Alerts + + + +--- +### Equinix Resource Manager ChangeEvent +#### DataSchema [JSON](https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/resource_manager/v1/ChangeEvent.json) +#### Data Type +`equinix.resource_manager.v1.ChangeEvent` +#### Supported Events, Metrics, and Alerts + + + diff --git a/jsonschema/catalog.json b/jsonschema/catalog.json index 1fe4624..14feb89 100644 --- a/jsonschema/catalog.json +++ b/jsonschema/catalog.json @@ -2,87 +2,274 @@ "$schema": "https://json.schemastore.org/schema-catalog", "version": 1, "schemas": [ + { + "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/access_manager/v1/ChangeEvent.json", + "domain": "Equinix Access Manager ChangeEvent", + "name": "ChangeEvent", + "description": "The data within all ChangeEvent events.", + "datatype": "equinix.access_manager.v1.ChangeEvent", + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, { "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/ChangeAlert.json", "domain": "Equinix Fabric ChangeAlert", "name": "ChangeAlert", "description": "The data within all ChangeAlert events.", - "datatype": "equinix.events.fabric.v1.ChangeAlert", - "cloudeventTypes": [] + "datatype": "equinix.fabric.v1.ChangeAlert", + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } }, { "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/ChangeEvent.json", "domain": "Equinix Fabric ChangeEvent", "name": "ChangeEvent", "description": "The data within all ChangeEvent events.", - "datatype": "equinix.events.fabric.v1.ChangeEvent", - "cloudeventTypes": [ - "equinix.fabric.router.state.provisioning", - "equinix.fabric.router.state.provisioned", - "equinix.fabric.router.state.reprovisioning", - "equinix.fabric.router.state.deprovisioning", - "equinix.fabric.router.state.deprovisioned", - "equinix.fabric.router.state.failed", - "equinix.fabric.router.state.not_provisioned", - "equinix.fabric.router.state.not_deprovisioned", - "equinix.fabric.port.state.provisioned", - "equinix.fabric.port.state.deprovisioned", - "equinix.fabric.port.state.failed", - "equinix.fabric.port.status.up", - "equinix.fabric.port.status.down", - "equinix.fabric.service_token.state.inactive", - "equinix.fabric.service_token.state.deleted", - "equinix.fabric.service_token.attribute.changed", - "equinix.fabric.connection.state.pending", - "equinix.fabric.connection.state.pending_interface_configuration", - "equinix.fabric.connection.state.provisioning", - "equinix.fabric.connection.state.provisioned", - "equinix.fabric.connection.state.deprovisioning", - "equinix.fabric.connection.state.deprovisioned", - "equinix.fabric.connection.state.pending_approval", - "equinix.fabric.connection.attribute.changed", - "equinix.fabric.connection.status.up", - "equinix.fabric.connection.status.down", - "equinix.fabric.connection.bgpipv4_session_status.established", - "equinix.fabric.connection.bgpipv4_session_status.idle", - "equinix.fabric.connection.bgpipv4_session_status.connect", - "equinix.fabric.connection.bgpipv6_session_status.established", - "equinix.fabric.connection.bgpipv6_session_status.idle", - "equinix.fabric.connection.bgpipv6_session_status.connect", - "equinix.fabric.network.state.provisioning", - "equinix.fabric.network.state.provisioned", - "equinix.fabric.network.state.deprovisioning", - "equinix.fabric.network.state.deprovisioned" - ] + "datatype": "equinix.fabric.v1.ChangeEvent", + "cloudeventTypes": { + "released": [ + "equinix.fabric.connection.attribute.changed", + "equinix.fabric.connection.bgpipv4_session_status.connect", + "equinix.fabric.connection.bgpipv4_session_status.established", + "equinix.fabric.connection.bgpipv4_session_status.idle", + "equinix.fabric.connection.bgpipv4_session_status.open_confirm", + "equinix.fabric.connection.bgpipv4_session_status.open_confirm", + "equinix.fabric.connection.bgpipv4_session_status.open_sent", + "equinix.fabric.connection.bgpipv4_session_status.open_sent", + "equinix.fabric.connection.bgpipv6_session_status.connect", + "equinix.fabric.connection.bgpipv6_session_status.established", + "equinix.fabric.connection.bgpipv6_session_status.idle", + "equinix.fabric.connection.state.deprovisioned", + "equinix.fabric.connection.state.deprovisioning", + "equinix.fabric.connection.state.pending", + "equinix.fabric.connection.state.provisioned", + "equinix.fabric.connection.state.provisioning", + "equinix.fabric.connection.status.down", + "equinix.fabric.connection.status.up", + "equinix.fabric.network.state.deprovisioned", + "equinix.fabric.network.state.deprovisioning", + "equinix.fabric.network.state.provisioned", + "equinix.fabric.network.state.provisioning", + "equinix.fabric.port.state.deprovisioned", + "equinix.fabric.port.state.failed", + "equinix.fabric.port.state.provisioned", + "equinix.fabric.port.status.down", + "equinix.fabric.port.status.up", + "equinix.fabric.router.state.deprovisioned", + "equinix.fabric.router.state.deprovisioning", + "equinix.fabric.router.state.failed", + "equinix.fabric.router.state.not_deprovisioned", + "equinix.fabric.router.state.not_provisioned", + "equinix.fabric.router.state.provisioned", + "equinix.fabric.router.state.provisioning", + "equinix.fabric.router.state.reprovisioning", + "equinix.fabric.service_token.attribute.changed", + "equinix.fabric.service_token.state.deleted", + "equinix.fabric.service_token.state.inactive" + ], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } }, { "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/MetricAlert.json", "domain": "Equinix Fabric MetricAlert", "name": "MetricAlert", "description": "The data within all MetricAlert events.", - "datatype": "equinix.events.fabric.v1.MetricAlert", - "cloudeventTypes": [] + "datatype": "equinix.fabric.v1.MetricAlert", + "cloudeventTypes": { + "released": [ + "equinix.fabric.connection.ipv4_installed_routes.utilization", + "equinix.fabric.connection.ipv6_installed_routes.utilization", + "equinix.fabric.router.ipv4_installed_routes.utilization", + "equinix.fabric.router.ipv6_installed_routes.utilization" + ], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } }, { "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/fabric/v1/MetricEvent.json", "domain": "Equinix Fabric MetricEvent", "name": "MetricEvent", "description": "The data within all MetricEvent events.", - "datatype": "equinix.events.fabric.v1.MetricEvent", - "cloudeventTypes": [ - "equinix.fabric.metric" - ], - "metricNames": [ - "equinix.fabric.port.packets_erred_rx.count", - "equinix.fabric.port.packets_erred_tx.count", - "equinix.fabric.port.packets_dropped_rx.count", - "equinix.fabric.port.packets_dropped_tx.count", - "equinix.fabric.metro.{:asideMetroCode}_{:zsideMetroCode}.latency", - "equinix.fabric.connection.bandwidth_rx.usage", - "equinix.fabric.connection.bandwidth_tx.usage", - "equinix.fabric.port.bandwidth_rx.usage", - "equinix.fabric.port.bandwidth_tx.usage" - ] + "datatype": "equinix.fabric.v1.MetricEvent", + "cloudeventTypes": { + "released": [ + "equinix.fabric.metric" + ], + "preview": [] + }, + "metricNames": { + "released": [ + "equinix.fabric.connection.bandwidth_rx.usage", + "equinix.fabric.connection.bandwidth_tx.usage", + "equinix.fabric.metro.am_{:metroCode}.latency", + "equinix.fabric.metro.at_{:metroCode}.latency", + "equinix.fabric.metro.ba_{:metroCode}.latency", + "equinix.fabric.metro.bg_{:metroCode}.latency", + "equinix.fabric.metro.bl_{:metroCode}.latency", + "equinix.fabric.metro.bo_{:metroCode}.latency", + "equinix.fabric.metro.bx_{:metroCode}.latency", + "equinix.fabric.metro.ca_{:metroCode}.latency", + "equinix.fabric.metro.ch_{:metroCode}.latency", + "equinix.fabric.metro.cl_{:metroCode}.latency", + "equinix.fabric.metro.cu_{:metroCode}.latency", + "equinix.fabric.metro.da_{:metroCode}.latency", + "equinix.fabric.metro.db_{:metroCode}.latency", + "equinix.fabric.metro.dc_{:metroCode}.latency", + "equinix.fabric.metro.de_{:metroCode}.latency", + "equinix.fabric.metro.dx_{:metroCode}.latency", + "equinix.fabric.metro.fr_{:metroCode}.latency", + "equinix.fabric.metro.gv_{:metroCode}.latency", + "equinix.fabric.metro.he_{:metroCode}.latency", + "equinix.fabric.metro.hh_{:metroCode}.latency", + "equinix.fabric.metro.hk_{:metroCode}.latency", + "equinix.fabric.metro.ho_{:metroCode}.latency", + "equinix.fabric.metro.il_{:metroCode}.latency", + "equinix.fabric.metro.jh_{:metroCode}.latency", + "equinix.fabric.metro.ka_{:metroCode}.latency", + "equinix.fabric.metro.kl_{:metroCode}.latency", + "equinix.fabric.metro.la_{:metroCode}.latency", + "equinix.fabric.metro.ld_{:metroCode}.latency", + "equinix.fabric.metro.lm_{:metroCode}.latency", + "equinix.fabric.metro.ls_{:metroCode}.latency", + "equinix.fabric.metro.ma_{:metroCode}.latency", + "equinix.fabric.metro.mb_{:metroCode}.latency", + "equinix.fabric.metro.md_{:metroCode}.latency", + "equinix.fabric.metro.me_{:metroCode}.latency", + "equinix.fabric.metro.mi_{:metroCode}.latency", + "equinix.fabric.metro.ml_{:metroCode}.latency", + "equinix.fabric.metro.mo_{:metroCode}.latency", + "equinix.fabric.metro.mt_{:metroCode}.latency", + "equinix.fabric.metro.mu_{:metroCode}.latency", + "equinix.fabric.metro.mx_{:metroCode}.latency", + "equinix.fabric.metro.ny_{:metroCode}.latency", + "equinix.fabric.metro.os_{:metroCode}.latency", + "equinix.fabric.metro.ot_{:metroCode}.latency", + "equinix.fabric.metro.pa_{:metroCode}.latency", + "equinix.fabric.metro.pe_{:metroCode}.latency", + "equinix.fabric.metro.ph_{:metroCode}.latency", + "equinix.fabric.metro.rj_{:metroCode}.latency", + "equinix.fabric.metro.se_{:metroCode}.latency", + "equinix.fabric.metro.sg_{:metroCode}.latency", + "equinix.fabric.metro.sk_{:metroCode}.latency", + "equinix.fabric.metro.sl_{:metroCode}.latency", + "equinix.fabric.metro.so_{:metroCode}.latency", + "equinix.fabric.metro.sp_{:metroCode}.latency", + "equinix.fabric.metro.st_{:metroCode}.latency", + "equinix.fabric.metro.sv_{:metroCode}.latency", + "equinix.fabric.metro.sy_{:metroCode}.latency", + "equinix.fabric.metro.tr_{:metroCode}.latency", + "equinix.fabric.metro.ty_{:metroCode}.latency", + "equinix.fabric.metro.va_{:metroCode}.latency", + "equinix.fabric.metro.wa_{:metroCode}.latency", + "equinix.fabric.metro.wi_{:metroCode}.latency", + "equinix.fabric.metro.zh_{:metroCode}.latency", + "equinix.fabric.port.bandwidth_rx.usage", + "equinix.fabric.port.bandwidth_tx.usage", + "equinix.fabric.port.packets_dropped_rx.count", + "equinix.fabric.port.packets_dropped_tx.count", + "equinix.fabric.port.packets_erred_rx.count", + "equinix.fabric.port.packets_erred_tx.count" + ], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + { + "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/identity/v1/ChangeEvent.json", + "domain": "Equinix Identity ChangeEvent", + "name": "ChangeEvent", + "description": "The data within all ChangeEvent events.", + "datatype": "equinix.identity.v1.ChangeEvent", + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + { + "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/network_edge/v1/ChangeEvent.json", + "domain": "Equinix Network Edge ChangeEvent", + "name": "ChangeEvent", + "description": "The data within all ChangeEvent events.", + "datatype": "equinix.network_edge.v1.ChangeEvent", + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } + }, + { + "url": "https://equinix.github.io/equinix-cloudevents/jsonschema/equinix/resource_manager/v1/ChangeEvent.json", + "domain": "Equinix Resource Manager ChangeEvent", + "name": "ChangeEvent", + "description": "The data within all ChangeEvent events.", + "datatype": "equinix.resource_manager.v1.ChangeEvent", + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] + } } ] } diff --git a/jsonschema/equinix/access_manager/v1/ChangeEvent.json b/jsonschema/equinix/access_manager/v1/ChangeEvent.json index 0a8c02d..576539c 100644 --- a/jsonschema/equinix/access_manager/v1/ChangeEvent.json +++ b/jsonschema/equinix/access_manager/v1/ChangeEvent.json @@ -4,8 +4,6 @@ "examples": [], "package": "equinix.access_manager.v1", "datatype": "equinix.access_manager.v1.ChangeEvent", - "cloudeventTypes": [ - ], "domain": "Equinix Access Manager ChangeEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -33,5 +31,17 @@ "title": "Resource", "description": "Schema of the resource that fired the event" } + }, + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/fabric/v1/ChangeAlert.json b/jsonschema/equinix/fabric/v1/ChangeAlert.json index 4c0d903..76f5b7f 100644 --- a/jsonschema/equinix/fabric/v1/ChangeAlert.json +++ b/jsonschema/equinix/fabric/v1/ChangeAlert.json @@ -4,7 +4,6 @@ "examples": [], "package": "equinix.fabric.v1", "datatype": "equinix.fabric.v1.ChangeAlert", - "cloudeventTypes": [], "domain": "Equinix Fabric ChangeAlert", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -151,5 +150,17 @@ "title": "ChangeData", "description": "ChangeData attribute schema" } + }, + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/fabric/v1/ChangeEvent.json b/jsonschema/equinix/fabric/v1/ChangeEvent.json index fe4fdf0..f7712b1 100644 --- a/jsonschema/equinix/fabric/v1/ChangeEvent.json +++ b/jsonschema/equinix/fabric/v1/ChangeEvent.json @@ -4,46 +4,6 @@ "examples": [], "package": "equinix.fabric.v1", "datatype": "equinix.fabric.v1.ChangeEvent", - "cloudeventTypes": [ - "equinix.fabric.connection.state.pending", - "equinix.fabric.connection.state.provisioning", - "equinix.fabric.connection.state.provisioned", - "equinix.fabric.connection.state.deprovisioning", - "equinix.fabric.connection.state.deprovisioned", - "equinix.fabric.connection.attribute.changed", - "equinix.fabric.connection.status.up", - "equinix.fabric.connection.status.down", - "equinix.fabric.connection.bgpipv4_session_status.established", - "equinix.fabric.connection.bgpipv4_session_status.idle", - "equinix.fabric.connection.bgpipv4_session_status.connect", - "equinix.fabric.connection.bgpipv4_session_status.open_sent", - "equinix.fabric.connection.bgpipv4_session_status.open_confirm", - "equinix.fabric.connection.bgpipv6_session_status.established", - "equinix.fabric.connection.bgpipv6_session_status.idle", - "equinix.fabric.connection.bgpipv6_session_status.connect", - "equinix.fabric.connection.bgpipv4_session_status.open_sent", - "equinix.fabric.connection.bgpipv4_session_status.open_confirm", - "equinix.fabric.network.state.provisioning", - "equinix.fabric.network.state.provisioned", - "equinix.fabric.network.state.deprovisioning", - "equinix.fabric.network.state.deprovisioned", - "equinix.fabric.port.state.provisioned", - "equinix.fabric.port.state.deprovisioned", - "equinix.fabric.port.state.failed", - "equinix.fabric.port.status.up", - "equinix.fabric.port.status.down", - "equinix.fabric.router.state.provisioning", - "equinix.fabric.router.state.provisioned", - "equinix.fabric.router.state.reprovisioning", - "equinix.fabric.router.state.deprovisioning", - "equinix.fabric.router.state.deprovisioned", - "equinix.fabric.router.state.failed", - "equinix.fabric.router.state.not_provisioned", - "equinix.fabric.router.state.not_deprovisioned", - "equinix.fabric.service_token.state.inactive", - "equinix.fabric.service_token.state.deleted", - "equinix.fabric.service_token.attribute.changed" - ], "domain": "Equinix Fabric ChangeEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -158,5 +118,56 @@ "title": "ChangeData", "description": "ChangeData attribute schema" } + }, + "cloudeventTypes": { + "released": [ + "equinix.fabric.connection.state.pending", + "equinix.fabric.connection.state.provisioning", + "equinix.fabric.connection.state.provisioned", + "equinix.fabric.connection.state.deprovisioning", + "equinix.fabric.connection.state.deprovisioned", + "equinix.fabric.connection.attribute.changed", + "equinix.fabric.connection.status.up", + "equinix.fabric.connection.status.down", + "equinix.fabric.connection.bgpipv4_session_status.established", + "equinix.fabric.connection.bgpipv4_session_status.idle", + "equinix.fabric.connection.bgpipv4_session_status.connect", + "equinix.fabric.connection.bgpipv4_session_status.open_sent", + "equinix.fabric.connection.bgpipv4_session_status.open_confirm", + "equinix.fabric.connection.bgpipv6_session_status.established", + "equinix.fabric.connection.bgpipv6_session_status.idle", + "equinix.fabric.connection.bgpipv6_session_status.connect", + "equinix.fabric.connection.bgpipv4_session_status.open_sent", + "equinix.fabric.connection.bgpipv4_session_status.open_confirm", + "equinix.fabric.network.state.provisioning", + "equinix.fabric.network.state.provisioned", + "equinix.fabric.network.state.deprovisioning", + "equinix.fabric.network.state.deprovisioned", + "equinix.fabric.port.state.provisioned", + "equinix.fabric.port.state.deprovisioned", + "equinix.fabric.port.state.failed", + "equinix.fabric.port.status.up", + "equinix.fabric.port.status.down", + "equinix.fabric.router.state.provisioning", + "equinix.fabric.router.state.provisioned", + "equinix.fabric.router.state.reprovisioning", + "equinix.fabric.router.state.deprovisioning", + "equinix.fabric.router.state.deprovisioned", + "equinix.fabric.router.state.failed", + "equinix.fabric.router.state.not_provisioned", + "equinix.fabric.router.state.not_deprovisioned", + "equinix.fabric.service_token.state.inactive", + "equinix.fabric.service_token.state.deleted", + "equinix.fabric.service_token.attribute.changed" + ], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/fabric/v1/MetricAlert.json b/jsonschema/equinix/fabric/v1/MetricAlert.json index bed2798..2aa4090 100644 --- a/jsonschema/equinix/fabric/v1/MetricAlert.json +++ b/jsonschema/equinix/fabric/v1/MetricAlert.json @@ -4,12 +4,6 @@ "examples": [], "package": "equinix.fabric.v1", "datatype": "equinix.fabric.v1.MetricAlert", - "cloudeventTypes": [ - "equinix.fabric.connection.ipv4_installed_routes.utilization", - "equinix.fabric.connection.ipv6_installed_routes.utilization", - "equinix.fabric.router.ipv4_installed_routes.utilization", - "equinix.fabric.router.ipv6_installed_routes.utilization" - ], "domain": "Equinix Fabric MetricAlert", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -155,5 +149,22 @@ "title": "AlertRule", "description": "Schema definition of AlertRule data" } + }, + "cloudeventTypes": { + "released": [ + "equinix.fabric.connection.ipv4_installed_routes.utilization", + "equinix.fabric.connection.ipv6_installed_routes.utilization", + "equinix.fabric.router.ipv4_installed_routes.utilization", + "equinix.fabric.router.ipv6_installed_routes.utilization" + ], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/fabric/v1/MetricEvent.json b/jsonschema/equinix/fabric/v1/MetricEvent.json index 955f6f9..8ca2e10 100644 --- a/jsonschema/equinix/fabric/v1/MetricEvent.json +++ b/jsonschema/equinix/fabric/v1/MetricEvent.json @@ -4,84 +4,9 @@ "examples": [], "package": "equinix.fabric.v1", "datatype": "equinix.fabric.v1.MetricEvent", - "cloudeventTypes": [ - "equinix.fabric.metric" - ], "domain": "Equinix Fabric MetricEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", - "metricNames": [ - "equinix.fabric.connection.bandwidth_rx.usage", - "equinix.fabric.connection.bandwidth_tx.usage", - "equinix.fabric.metro.am_{:metroCode}.latency", - "equinix.fabric.metro.at_{:metroCode}.latency", - "equinix.fabric.metro.ba_{:metroCode}.latency", - "equinix.fabric.metro.bg_{:metroCode}.latency", - "equinix.fabric.metro.bl_{:metroCode}.latency", - "equinix.fabric.metro.bo_{:metroCode}.latency", - "equinix.fabric.metro.bx_{:metroCode}.latency", - "equinix.fabric.metro.ca_{:metroCode}.latency", - "equinix.fabric.metro.ch_{:metroCode}.latency", - "equinix.fabric.metro.cl_{:metroCode}.latency", - "equinix.fabric.metro.cu_{:metroCode}.latency", - "equinix.fabric.metro.da_{:metroCode}.latency", - "equinix.fabric.metro.db_{:metroCode}.latency", - "equinix.fabric.metro.dc_{:metroCode}.latency", - "equinix.fabric.metro.de_{:metroCode}.latency", - "equinix.fabric.metro.dx_{:metroCode}.latency", - "equinix.fabric.metro.fr_{:metroCode}.latency", - "equinix.fabric.metro.gv_{:metroCode}.latency", - "equinix.fabric.metro.he_{:metroCode}.latency", - "equinix.fabric.metro.hh_{:metroCode}.latency", - "equinix.fabric.metro.hk_{:metroCode}.latency", - "equinix.fabric.metro.ho_{:metroCode}.latency", - "equinix.fabric.metro.il_{:metroCode}.latency", - "equinix.fabric.metro.jh_{:metroCode}.latency", - "equinix.fabric.metro.ka_{:metroCode}.latency", - "equinix.fabric.metro.kl_{:metroCode}.latency", - "equinix.fabric.metro.la_{:metroCode}.latency", - "equinix.fabric.metro.ld_{:metroCode}.latency", - "equinix.fabric.metro.lm_{:metroCode}.latency", - "equinix.fabric.metro.ls_{:metroCode}.latency", - "equinix.fabric.metro.ma_{:metroCode}.latency", - "equinix.fabric.metro.mb_{:metroCode}.latency", - "equinix.fabric.metro.md_{:metroCode}.latency", - "equinix.fabric.metro.me_{:metroCode}.latency", - "equinix.fabric.metro.mi_{:metroCode}.latency", - "equinix.fabric.metro.ml_{:metroCode}.latency", - "equinix.fabric.metro.mo_{:metroCode}.latency", - "equinix.fabric.metro.mt_{:metroCode}.latency", - "equinix.fabric.metro.mu_{:metroCode}.latency", - "equinix.fabric.metro.mx_{:metroCode}.latency", - "equinix.fabric.metro.ny_{:metroCode}.latency", - "equinix.fabric.metro.os_{:metroCode}.latency", - "equinix.fabric.metro.ot_{:metroCode}.latency", - "equinix.fabric.metro.pa_{:metroCode}.latency", - "equinix.fabric.metro.pe_{:metroCode}.latency", - "equinix.fabric.metro.ph_{:metroCode}.latency", - "equinix.fabric.metro.rj_{:metroCode}.latency", - "equinix.fabric.metro.se_{:metroCode}.latency", - "equinix.fabric.metro.sg_{:metroCode}.latency", - "equinix.fabric.metro.sk_{:metroCode}.latency", - "equinix.fabric.metro.sl_{:metroCode}.latency", - "equinix.fabric.metro.so_{:metroCode}.latency", - "equinix.fabric.metro.sp_{:metroCode}.latency", - "equinix.fabric.metro.st_{:metroCode}.latency", - "equinix.fabric.metro.sv_{:metroCode}.latency", - "equinix.fabric.metro.sy_{:metroCode}.latency", - "equinix.fabric.metro.tr_{:metroCode}.latency", - "equinix.fabric.metro.ty_{:metroCode}.latency", - "equinix.fabric.metro.va_{:metroCode}.latency", - "equinix.fabric.metro.wa_{:metroCode}.latency", - "equinix.fabric.metro.wi_{:metroCode}.latency", - "equinix.fabric.metro.zh_{:metroCode}.latency", - "equinix.fabric.port.bandwidth_rx.usage", - "equinix.fabric.port.bandwidth_tx.usage", - "equinix.fabric.port.packets_erred_rx.count", - "equinix.fabric.port.packets_erred_tx.count", - "equinix.fabric.port.packets_dropped_rx.count", - "equinix.fabric.port.packets_dropped_tx.count" - ], "definitions": { "Data": { "properties": { @@ -192,5 +117,90 @@ "title": "DataPoints", "additionalProperties": true } + }, + "cloudeventTypes": { + "released": [ + "equinix.fabric.metric" + ], + "preview": [] + }, + "metricNames": { + "released": [ + "equinix.fabric.connection.bandwidth_rx.usage", + "equinix.fabric.connection.bandwidth_tx.usage", + "equinix.fabric.metro.am_{:metroCode}.latency", + "equinix.fabric.metro.at_{:metroCode}.latency", + "equinix.fabric.metro.ba_{:metroCode}.latency", + "equinix.fabric.metro.bg_{:metroCode}.latency", + "equinix.fabric.metro.bl_{:metroCode}.latency", + "equinix.fabric.metro.bo_{:metroCode}.latency", + "equinix.fabric.metro.bx_{:metroCode}.latency", + "equinix.fabric.metro.ca_{:metroCode}.latency", + "equinix.fabric.metro.ch_{:metroCode}.latency", + "equinix.fabric.metro.cl_{:metroCode}.latency", + "equinix.fabric.metro.cu_{:metroCode}.latency", + "equinix.fabric.metro.da_{:metroCode}.latency", + "equinix.fabric.metro.db_{:metroCode}.latency", + "equinix.fabric.metro.dc_{:metroCode}.latency", + "equinix.fabric.metro.de_{:metroCode}.latency", + "equinix.fabric.metro.dx_{:metroCode}.latency", + "equinix.fabric.metro.fr_{:metroCode}.latency", + "equinix.fabric.metro.gv_{:metroCode}.latency", + "equinix.fabric.metro.he_{:metroCode}.latency", + "equinix.fabric.metro.hh_{:metroCode}.latency", + "equinix.fabric.metro.hk_{:metroCode}.latency", + "equinix.fabric.metro.ho_{:metroCode}.latency", + "equinix.fabric.metro.il_{:metroCode}.latency", + "equinix.fabric.metro.jh_{:metroCode}.latency", + "equinix.fabric.metro.ka_{:metroCode}.latency", + "equinix.fabric.metro.kl_{:metroCode}.latency", + "equinix.fabric.metro.la_{:metroCode}.latency", + "equinix.fabric.metro.ld_{:metroCode}.latency", + "equinix.fabric.metro.lm_{:metroCode}.latency", + "equinix.fabric.metro.ls_{:metroCode}.latency", + "equinix.fabric.metro.ma_{:metroCode}.latency", + "equinix.fabric.metro.mb_{:metroCode}.latency", + "equinix.fabric.metro.md_{:metroCode}.latency", + "equinix.fabric.metro.me_{:metroCode}.latency", + "equinix.fabric.metro.mi_{:metroCode}.latency", + "equinix.fabric.metro.ml_{:metroCode}.latency", + "equinix.fabric.metro.mo_{:metroCode}.latency", + "equinix.fabric.metro.mt_{:metroCode}.latency", + "equinix.fabric.metro.mu_{:metroCode}.latency", + "equinix.fabric.metro.mx_{:metroCode}.latency", + "equinix.fabric.metro.ny_{:metroCode}.latency", + "equinix.fabric.metro.os_{:metroCode}.latency", + "equinix.fabric.metro.ot_{:metroCode}.latency", + "equinix.fabric.metro.pa_{:metroCode}.latency", + "equinix.fabric.metro.pe_{:metroCode}.latency", + "equinix.fabric.metro.ph_{:metroCode}.latency", + "equinix.fabric.metro.rj_{:metroCode}.latency", + "equinix.fabric.metro.se_{:metroCode}.latency", + "equinix.fabric.metro.sg_{:metroCode}.latency", + "equinix.fabric.metro.sk_{:metroCode}.latency", + "equinix.fabric.metro.sl_{:metroCode}.latency", + "equinix.fabric.metro.so_{:metroCode}.latency", + "equinix.fabric.metro.sp_{:metroCode}.latency", + "equinix.fabric.metro.st_{:metroCode}.latency", + "equinix.fabric.metro.sv_{:metroCode}.latency", + "equinix.fabric.metro.sy_{:metroCode}.latency", + "equinix.fabric.metro.tr_{:metroCode}.latency", + "equinix.fabric.metro.ty_{:metroCode}.latency", + "equinix.fabric.metro.va_{:metroCode}.latency", + "equinix.fabric.metro.wa_{:metroCode}.latency", + "equinix.fabric.metro.wi_{:metroCode}.latency", + "equinix.fabric.metro.zh_{:metroCode}.latency", + "equinix.fabric.port.bandwidth_rx.usage", + "equinix.fabric.port.bandwidth_tx.usage", + "equinix.fabric.port.packets_erred_rx.count", + "equinix.fabric.port.packets_erred_tx.count", + "equinix.fabric.port.packets_dropped_rx.count", + "equinix.fabric.port.packets_dropped_tx.count" + ], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/identity/v1/ChangeEvent.json b/jsonschema/equinix/identity/v1/ChangeEvent.json index f80a3ed..e8bfaf2 100644 --- a/jsonschema/equinix/identity/v1/ChangeEvent.json +++ b/jsonschema/equinix/identity/v1/ChangeEvent.json @@ -4,8 +4,6 @@ "examples": [], "package": "equinix.identity.v1", "datatype": "equinix.identity.v1.ChangeEvent", - "cloudeventTypes": [ - ], "domain": "Equinix Identity ChangeEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -33,5 +31,17 @@ "title": "Resource", "description": "Schema of the resource that fired the event" } + }, + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/network_edge/v1/ChangeEvent.json b/jsonschema/equinix/network_edge/v1/ChangeEvent.json index 7f396aa..fb32ddc 100644 --- a/jsonschema/equinix/network_edge/v1/ChangeEvent.json +++ b/jsonschema/equinix/network_edge/v1/ChangeEvent.json @@ -4,8 +4,6 @@ "examples": [], "package": "equinix.network_edge.v1", "datatype": "equinix.network_edge.v1.ChangeEvent", - "cloudeventTypes": [ - ], "domain": "Equinix Network Edge ChangeEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -33,5 +31,17 @@ "title": "Resource", "description": "Schema of the resource that fired the event" } + }, + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/jsonschema/equinix/resource_manager/v1/ChangeEvent.json b/jsonschema/equinix/resource_manager/v1/ChangeEvent.json index 9d15dd6..942a471 100644 --- a/jsonschema/equinix/resource_manager/v1/ChangeEvent.json +++ b/jsonschema/equinix/resource_manager/v1/ChangeEvent.json @@ -4,8 +4,6 @@ "examples": [], "package": "equinix.resource_manager.v1", "datatype": "equinix.resource_manager.v1.ChangeEvent", - "cloudeventTypes": [ - ], "domain": "Equinix Resource Manager ChangeEvent", "$schema": "http://json-schema.org/draft-04/schema#", "$ref": "#/definitions/Data", @@ -33,5 +31,17 @@ "title": "Resource", "description": "Schema of the resource that fired the event" } + }, + "cloudeventTypes": { + "released": [], + "preview": [] + }, + "metricNames": { + "released": [], + "preview": [] + }, + "alertNames": { + "released": [], + "preview": [] } } diff --git a/scripts/generate_json_catalog.py b/scripts/generate_json_catalog.py index f99cd2b..c42c5bd 100644 --- a/scripts/generate_json_catalog.py +++ b/scripts/generate_json_catalog.py @@ -1,5 +1,6 @@ import os import json +import script_constants as sc def retrieve_json_schemas(): directory = os.path.dirname(os.path.abspath(__file__)) + '/../jsonschema' @@ -9,16 +10,28 @@ def retrieve_json_schemas(): if file.endswith('.json') and file != "catalog.json": with open(root + "/" + file, "r") as eventFile: data = json.load(eventFile) + events = { + sc.RELEASED: sorted(data[sc.EVENTS][sc.RELEASED]), + sc.PREVIEW: sorted(data[sc.EVENTS][sc.PREVIEW]) + } + metrics = { + sc.RELEASED: sorted(data[sc.METRICS][sc.RELEASED]), + sc.PREVIEW: sorted(data[sc.METRICS][sc.PREVIEW]) + } + alerts = { + sc.RELEASED: sorted(data[sc.ALERTS][sc.RELEASED]), + sc.PREVIEW: sorted(data[sc.ALERTS][sc.PREVIEW]) + } newItem = { "url": data["$id"], "domain": data["domain"], "name": data["name"], "description": data["definitions"]["Data"]["description"], "datatype": data["datatype"], - "cloudeventTypes": data["cloudeventTypes"] + "cloudeventTypes": events, + "metricNames": metrics, + "alertNames": alerts } - if "metricNames" in data: - newItem["metricNames"] = data["metricNames"] json_schemas.append(newItem) json_schemas.sort(key=lambda x: x["url"]) return json_schemas diff --git a/scripts/generate_readme_event_catalog.py b/scripts/generate_readme_event_catalog.py index b97fcb3..4ff4774 100644 --- a/scripts/generate_readme_event_catalog.py +++ b/scripts/generate_readme_event_catalog.py @@ -1,26 +1,45 @@ import os import json +import script_constants as sc -def table_row(schema): - cloudEventTypes = "
\n".join(map(lambda x: f"`{x}`", schema["cloudeventTypes"])) +def dropdowns(type, supported): + dropdowns = "#### " + type + if len(supported[sc.PREVIEW]) > 0: + dropdowns += "\n\n
\nIn Preview\n\n" + dropdowns += "
\n".join(map(lambda x: f"`{x}`", supported[sc.PREVIEW])) + dropdowns += "\n\n
\n\n" + if len(supported[sc.RELEASED]) > 0: + dropdowns += "\n\n
\nReleased\n\n" + dropdowns += "
\n".join(map(lambda x: f"`{x}`", supported[sc.RELEASED])) + dropdowns += "\n\n
\n""" + return dropdowns if len(dropdowns) > 20 else "" + +def schema_entry(schema): + cloudEventTypes = "" metrics = "" - if "metricNames" in schema: - metricNames = "
\n".join(map(lambda x: f"`{x}`", schema["metricNames"])) - metrics = f"#### Metric Name(s)\n{metricNames}" - return f"""### {schema["domain"]} + alerts = "" + if sc.EVENTS in schema: + cloudEventTypes = dropdowns(sc.README_EVENTS, schema[sc.EVENTS]) + if sc.METRICS in schema: + metrics = dropdowns(sc.README_METRICS, schema[sc.METRICS]) + if sc.ALERTS in schema: + alerts = dropdowns(sc.README_ALERTS, schema[sc.ALERTS]) + return f"""--- +### {schema["domain"]} #### DataSchema [JSON]({schema["url"]}) #### Data Type `{schema["datatype"]}` -#### CloudEvent Type(s) +#### Supported Events, Metrics, and Alerts {cloudEventTypes} -{metrics}""" +{metrics} +{alerts}""" def replace_readme_catalog(): readme_path = os.path.dirname(os.path.abspath(__file__)) + "/../README.md" catalog_path = os.path.dirname(os.path.abspath(__file__)) + "/../jsonschema/catalog.json" with open(catalog_path, "r") as catalog_file: catalog = json.load(catalog_file) - schemas = "\n".join(map(table_row, catalog["schemas"])) + schemas = "\n".join(map(schema_entry, catalog["schemas"])) with open(readme_path, "r+") as readme_file: content = readme_file.read() diff --git a/scripts/requirements.txt b/scripts/requirements.txt new file mode 100644 index 0000000..89099e3 --- /dev/null +++ b/scripts/requirements.txt @@ -0,0 +1 @@ +jsonschema==4.23.0 diff --git a/scripts/script_constants.py b/scripts/script_constants.py new file mode 100644 index 0000000..120804c --- /dev/null +++ b/scripts/script_constants.py @@ -0,0 +1,10 @@ +RELEASED = "released" +PREVIEW = "preview" + +EVENTS = "cloudeventTypes" +METRICS = "metricNames" +ALERTS = "alertNames" + +README_EVENTS = "Events" +README_METRICS = "Metrics" +README_ALERTS = "Alerts" \ No newline at end of file diff --git a/scripts/update_data_loader.py b/scripts/update_data_loader.py index 570d1e4..a6d7818 100644 --- a/scripts/update_data_loader.py +++ b/scripts/update_data_loader.py @@ -1,6 +1,7 @@ import os import json from collections import defaultdict +import script_constants as sc def retrieve_supported_events(): directory = os.path.dirname(os.path.abspath(__file__)) + '/../jsonschema' @@ -9,20 +10,41 @@ def retrieve_supported_events(): for file in files: if file.endswith('.json') and file != "catalog.json": with open(root + "/" + file, "r") as eventFile: - product = root.split("/")[-2] + domain = root.split("/")[-2] data = json.load(eventFile) - if product not in dataLoaderStructure: - dataLoaderStructure[product] = { - "eventTypes": [], - "metricNames": [], + if domain not in dataLoaderStructure: + dataLoaderStructure[domain] = { + sc.EVENTS: { + sc.RELEASED: [], + sc.PREVIEW: [] + }, + sc.METRICS: { + sc.RELEASED: [], + sc.PREVIEW: [] + }, + sc.ALERTS: { + sc.RELEASED: [], + sc.PREVIEW: [] + } } - dataLoaderStructure[product]["eventTypes"].extend(data["cloudeventTypes"]) - if "metricNames" in data: - dataLoaderStructure[product]["metricNames"].extend(data["metricNames"]) - dataLoaderStructure[product]["eventTypes"] = sorted(set(dataLoaderStructure[product]["eventTypes"])) - dataLoaderStructure[product]["metricNames"] = sorted(set(dataLoaderStructure[product]["metricNames"])) + data[sc.EVENTS][sc.RELEASED] + dataLoaderStructure[domain][sc.EVENTS][sc.RELEASED].extend(data[sc.EVENTS][sc.RELEASED]) + dataLoaderStructure[domain][sc.EVENTS][sc.PREVIEW].extend(data[sc.EVENTS][sc.PREVIEW]) + dataLoaderStructure[domain][sc.METRICS][sc.RELEASED].extend(data[sc.METRICS][sc.RELEASED]) + dataLoaderStructure[domain][sc.METRICS][sc.PREVIEW].extend(data[sc.METRICS][sc.PREVIEW]) + dataLoaderStructure[domain][sc.ALERTS][sc.RELEASED].extend(data[sc.ALERTS][sc.RELEASED]) + dataLoaderStructure[domain][sc.ALERTS][sc.PREVIEW].extend(data[sc.ALERTS][sc.PREVIEW]) - return dict(sorted(dataLoaderStructure.items())) + dataLoaderStructure[domain][sc.EVENTS][sc.RELEASED] = sorted(set(dataLoaderStructure[domain][sc.EVENTS][sc.RELEASED])) + dataLoaderStructure[domain][sc.EVENTS][sc.PREVIEW] = sorted(set(dataLoaderStructure[domain][sc.EVENTS][sc.PREVIEW])) + dataLoaderStructure[domain][sc.METRICS][sc.RELEASED] = sorted(set(dataLoaderStructure[domain][sc.METRICS][sc.RELEASED])) + dataLoaderStructure[domain][sc.METRICS][sc.PREVIEW] = sorted(set(dataLoaderStructure[domain][sc.METRICS][sc.PREVIEW])) + dataLoaderStructure[domain][sc.ALERTS][sc.RELEASED] = sorted(set(dataLoaderStructure[domain][sc.ALERTS][sc.RELEASED])) + dataLoaderStructure[domain][sc.ALERTS][sc.PREVIEW] = sorted(set(dataLoaderStructure[domain][sc.ALERTS][sc.PREVIEW])) + + dataLoaderStructure = dict(sorted(dataLoaderStructure.items())) + + return dataLoaderStructure def writeSupportedEventsToDataLoaderFile(supportedEvents): with open(os.path.dirname(os.path.abspath(__file__)) + "/../DataLoader.json", "w") as eventsFile: diff --git a/scripts/validate_json_schemas.py b/scripts/validate_json_schemas.py new file mode 100644 index 0000000..fd4e7df --- /dev/null +++ b/scripts/validate_json_schemas.py @@ -0,0 +1,19 @@ +import os +from jsonschema import validate +import json + +def validateJsonSchemas(): + validationSchemaFile = os.path.dirname(os.path.abspath(__file__))+"/jsonschema-org-schema.json" + with open(validationSchemaFile, "r") as schemaFile: + schema = json.load(schemaFile) + directory = os.path.dirname(os.path.abspath(__file__)) + '/../jsonschema' + for root, dirs, files in os.walk(directory): + for file in files: + if file.endswith('.json') and file != "catalog.json": + with open(root + "/" + file, "r") as eventFile: + data = json.load(eventFile) + validate(instance=data, schema=schema) + + +if __name__ == "__main__": + validateJsonSchemas()