Skip to content
CAI
Software that uses CAICheck a score

jerrywjl/event-driven-ansible

57.2

Adequate · 5 August 2026

5.7k

lines of production code

Python

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Event-Driven Automation (EDA) framework that ingests events from diverse sources such as webhooks, cloud providers, and message brokers. It processes these events using customizable filters and executes automated responses via Ansible playbooks and custom modules. The platform also provides management capabilities for controlling external resources like tokens, credentials, and rulebook activations.

How it got here

2022 — Project initialization and test coverage

9 changes.

This period focused on establishing the project's foundational infrastructure, including repository setup, CI/CD tooling, and dependency management. Significant effort was directed toward comprehensive test coverage, adding integration and unit tests for various event source plugins and demo environments.

2023–2024 — EDA Controller integration and event source expansion

8 changes.

This period focused on expanding the EDA system's capabilities by introducing a wide range of new event source plugins for diverse ingestion and adding comprehensive unit tests for event filters. Simultaneously, the project established a structured approach to dependency management and introduced new modules and utilities for managing EDA Controller resources, including authentication and client interactions.

Features

Add Dynatrace integration demo

A new demo for integrating with Dynatrace has been added to the demos directory. It includes a Python-based fake application that simulates a process crash, a rulebook that listens for Dynatrace problem alerts via a webhook, and an Ansible playbook to restart the process. The demo also provides configuration files and instructions for setting up the environment.

demos · high confidence

Add EDA Controller module documentation fragments

Added new documentation fragments for the EDA Controller module, defining options for controller\_host, controller\_username, controller\_password, request\_timeout, and validate\certs. These options support environment variables (CONTROLLER\\, AAP\\*) and include aliases for backward compatibility.

_plugins/doc\fragments · high confidence

Add new event source plugins for diverse event ingestion

Introduce a suite of new event source plugins for the EDA system, enabling ingestion from various external systems. This includes webhooks (with optional mTLS and HMAC verification), AWS CloudTrail and SQS, Azure Service Bus, Kafka (with SASL and SSL support), PostgreSQL listener, and generic sources for files, ranges, ticks, URLs, journald, and alertmanager. These plugins expand the system's ability to consume events from cloud providers, message brokers, and local file systems.

_extensions/eda/plugins/event\source · high confidence

Introduce shared module utilities for controller client and authentication

Adds a new \plugins/module\_utils\ package containing shared utilities for interacting with the controller API. This includes a \Client\ class that handles HTTP requests, URL building, and error handling, along with a \Controller\ class that provides common operations like looking up resource IDs, creating items, and handling check mode. The package also defines custom exception classes (\EDAError\, \EDAHTTPError\, \AuthError\) and argument specifications for authentication parameters, consolidating logic previously scattered across individual modules.

_plugins/module\utils · high confidence

New event filters for key normalization and data extraction

Added several new event filter plugins: \dashes\_to\_underscores\ to convert dashes to underscores in keys, \normalize\_keys\ to replace non-alphanumeric characters with underscores, \json\_filter\ to include or exclude specific keys from events, \insert\_hosts\_to\_meta\ to extract host information from event data into the meta dict, and \noop\ as a placeholder filter.

_extensions/eda/plugins/event\filter · high confidence

New modules for managing EDA Controller resources

Added new modules to manage EDA Controller resources: controller\_token, credential, credential\_info, credential\_type, credential\_type\_info, decision\_environment, decision\_environment\_info, event\_stream, event\_stream\_info, project, project\_info, rulebook\_activation, and rulebook\_activation\_copy. These modules support creating, updating, and deleting resources such as tokens, credentials, decision environments, event streams, projects, and rulebook activations, along with corresponding info modules for listing and retrieving details about these resources.

plugins/modules · high confidence

Repository initialization and CI/CD infrastructure setup

The repository was initialized with comprehensive tooling and configuration files to support development and testing workflows. This includes a pre-commit configuration (\.pre-commit-config.yaml\) that integrates linters and formatters such as Black, Ruff, Flake8, MyPy, and CSpell. A \tox.ini\ file was added to orchestrate testing environments for linting, unit tests, integration tests, and documentation generation. Additional configuration files include \.ansible-lint\, \.flake8\, \.readthedocs.yaml\ for documentation builds, \codecov.yml\ for coverage reporting, and \bindep.txt\ for system dependencies. The \galaxy.yml\ manifest was created to define the \ansible.eda\ collection metadata, and a \LICENSE\ file (Apache 2.0) was added to establish the project's licensing.

(repo-wide) · high confidence

Test coverage

Add integration tests for the webhook event source plugin; Added integration tests for the Kafka event source plugin; Added integration tests for the URL check event source; Added test infrastructure and staging environment scripts; Added unit tests for event filters; Added unit tests for event source plugins; Added unit tests for module utilities; New integration test infrastructure and utilities.

Dependencies

Added build and dependency configuration files for the collection

The .config directory now contains several new files that define the project's dependency constraints (constraints.txt), test and documentation requirements (requirements-test.in, requirements-docs.in), a manifest of expected files for the built collection (manifest.txt), and configuration for the galaxy-importer and spell-checking tools. These changes establish a more structured approach to managing Python dependencies, testing environments, and documentation generation, ensuring that the build process and CI/CD pipelines have explicit definitions for required packages and file structures.

.config · high confidence

Project configuration and dependencies standardized via pyproject.toml and requirements files

The project now uses pyproject.toml to configure tooling (black, isort, mypy, pylint, ruff) and define dependencies in requirements.txt. Key dependency updates include adding kafka-python (with GSSAPI support) and systemd-python, while removing duplicate entries for dpath and aiobotocore. Test requirements are also explicitly defined in tests/unit/requirements.txt.

(dependencies) · medium confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 57 → 57 (-0.0)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.08.19) — scores are not directly comparable.

Lenses

  • Code Health 89 → 89 (-0.2)
  • Architecture 100 → 100 (+0.0)
  • Maturity 53 → 53 (+0.0)
  • Readiness 56 → 56 (+0.0)
  • Security 50 → 50 (+0.0)

Resolved (12)

  • Build action pinned to a mutable branch
  • Duplicated block (11 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (13 lines × 2) (plugins/modules/decision_environment_info.py)
  • Duplicated block (14 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (14 lines × 3) (plugins/modules/controller_token.py)
  • Duplicated block (16 lines × 2) (plugins/modules/credential.py)
  • Duplicated block (16 lines × 2) (plugins/modules/credential.py)
  • Duplicated block (16 lines × 3) (plugins/modules/credential_info.py)
  • Duplicated block (19 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (21 lines × 2) (plugins/modules/decision_environment.py)
  • High: security finding (details withheld)
  • High: security finding (details withheld)

New (12)

  • Duplicated block (10 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (12 lines × 2) (plugins/modules/decision_environment_info.py)
  • Duplicated block (13 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (13 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (13 lines × 3) (plugins/modules/controller_token.py)
  • Duplicated block (15 lines × 2) (plugins/modules/credential.py)
  • Duplicated block (15 lines × 2) (plugins/modules/credential.py)
  • Duplicated block (15 lines × 3) (plugins/modules/credential_info.py)
  • Duplicated block (18 lines × 2) (plugins/modules/credential_type.py)
  • Duplicated block (20 lines × 2) (plugins/modules/decision_environment.py)
  • High: security finding (details withheld)
  • High: security finding (details withheld)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

jerrywjl/event-driven-ansible was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 5 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 1cef0d4638235d87faa748fd1b90e394db106fc3 — the exact code this score is about.
  • Scored under rubric-2026.08.19 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.