Skip to content
CAI
Software that uses CAICheck a score

mesos/chronos

43.6

Weak · 27 September 2026

6.5k

lines of production code

Scala

with JavaScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Add Chronos sync and startup scripts

Introduced bin/chronos-sync.rb, a Ruby script that synchronizes job configurations between local YAML files and the Chronos scheduler, supporting HTTP basic authentication, validation, and deletion of missing jobs. Also added bin/start.sh to launch the Chronos Java application with configurable JVM options and HTTP port.

bin · high confidence

Add LIKE, UNLIKE, and EQUALS constraint types for job scheduling

Users can now define more flexible job placement rules using three new constraint types: EQUALS for exact attribute matching, LIKE for regular-expression-based matching, and UNLIKE to exclude specific attribute values. These new constraint classes allow jobs to be scheduled on or excluded from nodes based on complex attribute patterns, expanding the scheduler's ability to manage workload distribution across heterogeneous clusters.

src/main/scala/org/apache/mesos/chronos/scheduler/jobs/constraints · high confidence

Add job statistics tracking with Cassandra backend

A new JobStats component has been introduced to track job states and task statistics. It maintains an in-memory map of job states and provides methods to update and retrieve job status. Additionally, it integrates with a Cassandra backend to store and query detailed task statistics, including element processing counts and task states, ensuring that job observers are properly notified of state changes.

src/main/scala/org/apache/mesos/chronos/scheduler/jobs/stats · high confidence

Initial project scaffolding and documentation

The repository was initialized with essential project files, including a comprehensive README.md, Apache 2.0 LICENSE and NOTICE files, a .gitignore, a .mailmap, and a .travis.yml for CI. Additionally, a build-release.sh script and build.xml for asset compilation were added to support building the project and its Docker image.

(repo-wide) · high confidence

Introduce Main entry point for Chronos scheduler

A new Main.scala file has been added to the scheduler package, serving as the primary entry point for the Chronos application. This file initializes core services including Zookeeper, HTTP, JobScheduler, and MetricReporter, and manages the application lifecycle with a try-catch block to handle unexpected errors gracefully.

src/main/scala/org/apache/mesos/chronos/scheduler · high confidence

Introduce Mesos state persistence interface and implementation

Added a new \PersistenceStore\ trait and its \MesosStatePersistenceStore\ implementation in the \scheduler/state\ package. This introduces a dedicated abstraction for storing and retrieving job and task data, handling serialization, ZooKeeper path management, and retry logic for state updates.

src/main/scala/org/apache/mesos/chronos/scheduler/state · high confidence

Introduce new utility classes for job serialization and actor supervision

Added JobDeserializer and JobSerializer to handle JSON conversion for Chronos jobs, including fields for task info data, fetch configurations, and container networking details. Added a Supervisor actor to manage the Akka actor system with a one-for-one restart strategy. Added a Timestamp utility class for UTC time handling and duration calculations.

src/main/scala/org/apache/mesos/chronos/utils · high confidence

Introduce structured job definitions and scheduling logic

The scheduler now uses dedicated case classes to represent job configurations and execution states. Job definitions (BaseJob, ScheduleBasedJob, DependencyBasedJob) now include fields for owner, description, constraints, and concurrent execution. Execution is managed through a new JobsObserver event system that emits lifecycle events (Queued, Started, Finished, Failed, etc.). Scheduling is handled by the new JobSchedule and Iso8601Expressions classes, which parse and validate cron-like schedules. Task management is centralized in TaskManager, which tracks running tasks and manages the high/normal priority queues. Additionally, the system now supports containerized jobs via the Container, Volume, and Network classes, and exposes job metrics through JobMetrics.

src/main/scala/org/apache/mesos/chronos/scheduler/jobs · high confidence

Introduced JobGraph class for managing job dependencies

A new JobGraph class was added to the scheduler's graph package, providing a directed acyclic graph (DAG) representation of job dependencies. This component manages the relationships between jobs, allowing the system to track parent-child dependencies and determine which jobs are ready to execute based on the completion of their dependencies.

src/main/scala/org/apache/mesos/chronos/scheduler/graph · high confidence

Introduces configuration and dependency injection for job metrics, stats, and notifications

The scheduler's configuration and dependency injection layer has been restructured into dedicated modules. New configuration traits define parameters for Cassandra (contact points, port, credentials, keyspace, table, consistency, TTL) and Graphite (host/port, reporting interval, group prefix). A new JobMetricsModule wires up the MetricReporterService, while JobStatsModule provides the Cassandra cluster builder and JobStats singleton. MainModule now explicitly binds core scheduler components (Scheduler, TaskManager, MesosTaskBuilder, JobGraph) and constructs the JobScheduler with all its dependencies. Notification clients (Mail, Raven, Slack, Mattermost, HTTP) are dynamically created based on configuration. Additionally, MediaType constants for JavaScript and CSS are exposed.

src/main/scala/org/apache/mesos/chronos/scheduler/config · high confidence

New REST API endpoints for job management, stats, and task control

The scheduler's REST API is restructured with new resources for managing jobs, including creating and updating scheduled and dependent jobs, deleting jobs, and manually triggering executions. A new endpoint exposes job statistics and task history, while another provides performance metrics by percentile. Additional endpoints allow killing tasks for a job, retrieving the current leader, and exporting the job dependency graph in DOT and CSV formats. A CORS filter is also added to allow cross-origin requests.

src/main/scala/org/apache/mesos/chronos/scheduler/api · high confidence

New UI assets and configuration files

The UI resources directory now includes a comprehensive set of configuration and style files to support the new frontend. This includes the Bootstrap v3.3.7 CSS framework, along with build and linting configurations for the JavaScript toolchain (Babel, ESLint, JSHint, Bower, NPM, and Git). Additionally, logging configurations for Jetty and the Java application have been added to standardize log output.

src/main/resources · high confidence

New notification system for job events

Chronos now supports sending notifications for job events (such as failures, retries, and deletions) through a new notification client architecture. This introduces a \NotificationClient\ trait and specific implementations for email (MailClient), HTTP endpoints (HttpClient), Slack, and Mattermost. Users can now configure these clients to receive alerts about job status changes, with the system automatically dispatching messages to the appropriate channels based on job owner and event type.

src/main/scala/org/apache/mesos/chronos/notification · high confidence

Behavioural changes

Refactored Mesos scheduler integration into new modular components

The Mesos scheduler integration has been refactored into distinct, focused components to improve code organization and maintainability. A new \ConstraintChecker\ object was introduced to handle resource offer validation against job constraints, specifically adding hostname attributes for constraint matching. The \MesosDriverFactory\ was created to manage the lifecycle of the Mesos \SchedulerDriver\, ensuring it can be restarted if the leader abdicates. The core scheduling logic was moved into \MesosJobFramework\, which now handles resource offers, task generation, and task launching. Additionally, an actor-based \MesosOfferReviver\ system was implemented to manage the rate-limited revival of Mesos offers, preventing excessive API calls. The \MesosTaskBuilder\ was updated to include \maxCompletionTime\ in task info and properly handle environment variables and URIs. Finally, \SchedulerDriverBuilder\ was added to encapsulate the creation of the Mesos driver with proper authentication and framework info configuration.

src/main/scala/org/apache/mesos/chronos/scheduler/mesos · high confidence

Test coverage

Add integration test suite for scheduled jobs; Added comprehensive unit tests for Chronos scheduler components; Configure test logging to suppress verbose output.

Dependencies

Updated build dependencies and configuration

The project's build system and frontend tooling have been updated. The Maven build (pom.xml) now targets Java 1.8 and Scala 2.11.8, and upgrades several libraries including Akka (2.3.16), Cassandra driver (3.1.2), Chaos (0.8.7), and Mesos utils (1.6.0). Additionally, the frontend UI assets now use a new package.json configuration that includes dependencies for React, MobX, Webpack, and Babel, replacing the previous setup.

(dependencies) · high 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 34 → 44 (+10.1)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 40 → 57 (+16.1)
  • Architecture 69 → 91 (+22.0)
  • Maturity 51 → 45 (-6.1)
  • Readiness 13 → 27 (+13.8)
  • Security 91 → 89 (-1.3)

Resolved (15)

  • (anonymous) (cognitive 21) (src/main/resources/ui/models/JobForm.js)
  • Dimension evaluation failed
  • High IaC: DS-0002 (integration-tests/Dockerfile)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • LLM evaluation failed
  • Low IaC: DS-0005 (Dockerfile)
  • Low IaC: DS-0005 (Dockerfile)
  • Low IaC: DS-0026 (Dockerfile)
  • Low IaC: DS-0026 (integration-tests/Dockerfile)
  • No automated tests
  • No exposed public API
  • No tests found
  • Scanner failed to run — not a clean result
  • Test reliability not included

New (67)

  • Change coupling: JobDeserializer.scala ↔ JobSerializer.scala (src/main/scala/org/apache/mesos/chronos/utils/JobDeserializer.scala)
  • Change coupling: MesosTaskBuilder.scala ↔ JobSerializer.scala (src/main/scala/org/apache/mesos/chronos/scheduler/mesos/MesosTaskBuilder.scala)
  • ClassTooLong: JobScheduler (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/JobScheduler.scala)
  • Dormant codebase
  • Duplicated block (10–11 lines × 2) (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/stats/JobStats.scala)
  • Duplicated block (11–12 lines × 2) (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/JobScheduler.scala)
  • Duplicated block (15 lines × 3) (src/main/scala/org/apache/mesos/chronos/notification/HttpClient.scala)
  • Duplicated block (16–17 lines × 15) (src/main/scala/org/apache/mesos/chronos/scheduler/api/DependentJobResource.scala)
  • Duplicated block (17 lines × 3) (src/main/scala/org/apache/mesos/chronos/utils/JobDeserializer.scala)
  • Duplicated block (21 lines × 2) (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/stats/JobStats.scala)
  • Duplicated block (21 lines × 2) (src/main/scala/org/apache/mesos/chronos/utils/JobDeserializer.scala)
  • Duplicated block (28 lines × 2) (src/main/scala/org/apache/mesos/chronos/notification/MattermostClient.scala)
  • Duplicated block (9 lines × 4) (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/stats/JobStats.scala)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Iso8601JobResource.post (cognitive 18) (src/main/scala/org/apache/mesos/chronos/scheduler/api/Iso8601JobResource.scala)
  • JobDeserializer.deserialize (cognitive 192) (src/main/scala/org/apache/mesos/chronos/utils/JobDeserializer.scala)
  • JobDeserializer.deserialize (cyclomatic 99) (src/main/scala/org/apache/mesos/chronos/utils/JobDeserializer.scala)
  • JobForm.toJS (cognitive 34) (src/main/resources/ui/models/JobForm.js)
  • JobScheduler.handleFailedTask (cognitive 32) (src/main/scala/org/apache/mesos/chronos/scheduler/jobs/JobScheduler.scala)
  • …and 47 more

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

Survey your own repository

mesos/chronos 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 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit c1348ddfd80eb8f888418805005066c230fc6ad2 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.