yahoo/CMAK
43.1
Weak · 27 September 2026
15.1k
lines of production code
Scala
primary language
4
measurements over time
What this system is
This release marks the project's rebranding to CMAK, introducing comprehensive LDAP and basic authentication support for both the application and Kafka clusters. The update significantly expands monitoring capabilities with new RESTful APIs for cluster, broker, and consumer metrics, alongside full management interfaces for LogKafka instances. Under the hood, the codebase undergoes major architectural reorganization of actors and models, while the UI modernizes with Bootstrap 4 components and feature gates for new capabilities.
Features
Add Logkafka management UI for collecting and sending logs to Apache Kafka
A new set of views for managing Logkafka instances has been added to the application. Users can now create new Logkafka configurations, view a list of all configured instances with their status and metadata, and update or delete existing configurations. The list view displays key details such as log path, file size, and last rotation time, while the detail view provides a summary of the Logkafka identity and its configuration.
app/views/logkafka · high confidence
Add basic authentication and LDAP support for cluster configuration
Users can now configure basic authentication and LDAP authentication for Kafka clusters. The cluster configuration form in the UI has been expanded to include fields for security protocol, SASL mechanism, and JAAS configuration. Additionally, a new \BasicAuthenticationFilter\ and \LDAPAuthenticator\ have been introduced to handle authentication logic, allowing administrators to secure the application with LDAP or basic auth credentials.
app/controllers · high confidence
Add configuration and validation support for logkafka and broker/topic settings
The application now includes dedicated configuration and validation logic for logkafka and broker/topic settings. New utility classes have been added to manage logkafka configurations (including hostname, ID, and path validation) and broker configurations, mapping specific Kafka versions to their respective config schemas. This enables the system to validate and manage logkafka-related settings and broker configurations across supported Kafka versions.
app/kafka/manager/utils · high confidence
Add consumer management and monitoring views
The consumer management interface has been reorganized and expanded to provide deeper visibility into Kafka consumer groups. A new 'Consumer List' view displays all active consumers, their types, and the topics they consume from, including lag and coverage metrics. Individual consumer views now show detailed per-topic information, including partition-level offsets, lag, and ownership status. This allows users to monitor consumer health and track consumption progress across their clusters.
app/views/consumer · high confidence
Add partition assignment and management UI
The topic view now includes new interfaces for managing partition assignments and topic configurations. Users can now generate and run partition assignments for single or multiple topics, perform manual partition assignments, and update topic configurations directly from the UI. The topic list view has been enhanced to display additional metrics such as broker spread, skew, and under-replication percentages, along with options to add partitions to multiple topics at once. A new confirmation page has been added for topic deletion to prevent accidental removals.
app/views/topic · high confidence
Add support for monitoring JMX metrics and new Kafka versions
The application now includes a new \KafkaJMX\ module to fetch broker metrics (such as bytes in/out, messages, and OS CPU load) via JMX, and the \model\ package defines data structures for cluster, broker, and topic identities. Additionally, the \KafkaVersion\ enum is expanded to include support for Kafka versions 0.10.1.0, 0.11.0.2, 1.0.0, 1.1.0, 1.1.1, 2.0.0, 2.1.0, 2.1.1, 2.2.0, 2.2.1, 2.2.2, 2.3.0, 2.3.1, 2.4.0, 2.4.1, 2.5.0, 2.5.1, 2.6.0, 2.7.0, 2.8.0, 2.8.1, 3.0.0, 3.1.0, 3.1.1, and 3.2.0.
app/kafka/manager/model · high confidence
Added Bootstrap 4 styling integration for DataTables
Added the \dataTables.bootstrap4.js\ file to provide Bootstrap 4 styling for the DataTables library. This new JavaScript file configures default settings, CSS classes, and a custom page button renderer to ensure DataTables controls match the Bootstrap 4 design system.
public/dataTables · high confidence
Added Chartist.js v0.9.1 library assets
The public/chartist directory now includes the minified JavaScript (chartist.min.js) and CSS (chartist.min.css) for Chartist.js version 0.9.1, enabling the rendering of line, bar, and pie charts in the application.
public/chartist · high confidence
Added environment configuration template for package creation
A new template file (etc-default) has been added to the templates directory. This file provides environment configuration for package creation, defining variables such as JAVA\_OPTS and PIDFILE paths, which are used during the startup of the application.
src/templates · medium confidence
Added support for LogKafka management
The application now supports managing LogKafka instances alongside standard Kafka topics and brokers. This change introduces new actors (LogkafkaCommandActor, LogkafkaStateActor, LogkafkaViewCacheActor) and associated model classes to handle the creation, deletion, and configuration of LogKafka instances. The system now caches and displays LogKafka identities and configurations, allowing users to manage these additional log-collecting nodes through the same interface used for standard Kafka cluster management.
app/kafka/manager · high confidence
Expanded configuration and routing for new management features
The application configuration (application.conf) has been updated to support new feature gates, LDAP authentication, and CMAK-specific settings, while also deprecating the old 'kafka-manager' prefix in favor of 'cmak'. New configuration files (consumer.properties, logback.xml, logger.xml) have been added to support consumer management and logging. Additionally, the routes file has been significantly expanded to include new endpoints for managing logkafka, consumer groups, broker configurations, and various administrative APIs.
conf · high confidence
Introduce feature flags for cluster capabilities
A new \KMFeature.scala\ file defines a \ClusterFeature\ trait and several specific feature flags (e.g., \KMLogKafkaFeature\, \KMDeleteTopicFeature\, \KMJMXMetricsFeature\, \KMDisplaySizeFeature\, \KMPollConsumersFeature\). The \ClusterFeatures\ object maps \ClusterConfig\ settings (like \logkafkaEnabled\, \jmxEnabled\, \displaySizeEnabled\, \pollConsumers\) to these feature flags, enabling conditional behavior based on cluster configuration.
app/kafka/manager/features · high confidence
New Kafka Manager API endpoints for cluster, broker, topic, and consumer monitoring
A new \KafkaStateCheck\ controller is introduced in \app/controllers/api\, exposing a comprehensive set of RESTful endpoints for monitoring Kafka infrastructure. Users can now retrieve structured JSON data for clusters, broker lists (including an extended view), topic lists, and specific topic identities. The API also provides detailed consumer metrics, including group summaries with total lag, percentage covered, and partition-level offsets and owners. All responses are formatted as JSON using the \json4s\ library, and the endpoints are secured against clickjacking via the \X-Frame-Options\ header.
app/controllers/api · high confidence
Architecture
Reorganize actor classes into the 'actor' subpackage
The \DeleteClusterActor\ and \KafkaManagerActor\ classes have been moved from the \kafka.manager\ package to \kafka.manager.actor\. This reorganization groups the core actor implementations together, improving code structure and maintainability without changing external behavior.
app/kafka/manager/actor · high confidence
Reorganized cluster management actors into a dedicated package
The cluster management logic has been reorganized into the \app/kafka/manager/actor/cluster\ package. This change moves \KafkaCommandActor\ into the new \cluster\ package and introduces new actors (\BrokerViewCacheActor\, \ClusterManagerActor\, \KafkaStateActor\) to handle cluster state, broker views, and Kafka state management. The \KafkaCommandActor\ is now a \BaseClusterCommandActor\ that utilizes a \LongRunningPoolActor\ for asynchronous execution, improving concurrency handling for cluster operations.
app/kafka/manager/actor/cluster · high confidence
Behavioural changes
Add scheduled leader election and update UI components
A new 'Schedule Leader Election' view has been added, allowing users to schedule preferred replica elections. The existing Preferred Replica Election and Reassign Partitions views have been updated to support feature gates, and the UI has been modernized by replacing Bootstrap 3 'panel' components with Bootstrap 4 'card' components, while also adding client-side JavaScript for checkbox selection and form submission control.
app/views · high confidence
Disabled Debian package service lifecycle hooks
The Debian package build now includes pre/post install/remove scripts (postinst, postrm, preinst, prerm) that are intentionally disabled. These scripts contain comments explaining that the service does not start cleanly without proper configuration, preventing automatic service management during package installation or removal.
src/debian · medium confidence
Enhanced broker management and monitoring views
The broker management interface has been significantly expanded. A new 'Update Config' page allows users to modify broker settings directly. The broker list and view pages now display JMX metrics, including bytes in/out, size, and message counts. The broker view page also includes a chart for message count history and a detailed table of per-topic partition distribution.
app/views/broker · medium confidence
Expanded form models for cluster, topic, and partition reassignment operations
The form models in app/models/form have been expanded to support new cluster configuration options (JMX, consumer polling, SASL/SSL security, tuning), topic configuration management, and multi-topic partition reassignment. Specifically, ClusterOperation now includes JMX, security protocol, and SASL fields; TopicOperation adds config updates and multi-topic partition additions; ReassignPartitionOperation switches to an Enum-based structure and adds support for multiple topic/broker selections and replication factor assignment.
app/models/form · medium confidence
Migrates application startup to Play's ApplicationLoader
The application now uses a custom ApplicationLoader (KafkaManagerLoader) to initialize the Play application, replacing the previous startup mechanism. This change introduces a BasicAuthenticationFilter for HTTP requests and configures the router with a configurable HTTP context prefix, enabling more flexible URL routing and security filtering at the application level.
app/loader · medium confidence
Navigation structure updated for consumers, logkafka, and broker views
The navigation model was refactored to support new entity types and updated routing signatures. Breadcrumb and menu generation now handle Consumers, Logkafkas, and Brokers with specific route mappings. The \BCDynamicMultiNamedLink\ case class was updated to accept a \List\[String\]\ instead of a single string for the second parameter, and a new \BCDynamicMultiNamedLink2\ was added to support three-parameter routes. New menu items and breadcrumb paths were added for Consumer views, Logkafka views, and Broker views, ensuring the UI correctly displays navigation elements for these resources.
app/models/navigation · medium confidence
New broker metrics views and UI updates for command results
Added new template files for displaying broker metrics: brokerMetrics.scala.html (full metrics table), expandedBrokerMetrics.scala.html (includes OS-level CPU load metrics), and shortBrokerMetrics.scala.html (condensed broker list view with feature-gated JMX metrics). Updated resultOfCommand.scala.html and resultsOfCommand.scala.html to use Bootstrap 4 card components instead of panels, and changed the success message to display 'Done!' in an alert box.
app/views/common · high confidence
New styles for manual partition assignment interface
The web interface for manual partition assignment received visual updates. New CSS rules were added to style the assignment pane, cells, and buttons, including a red glow effect for topics under reassignment, improved layout for partition and assignment cells, and styling for the metrics selection dropdown.
app/assets · high confidence
Override Kafka JmxReporter to disable default metrics reporting
The application now uses a custom JmxReporter implementation that overrides the default Kafka metrics reporting behavior. The new implementation disables all default metrics reporting by providing empty method bodies for initialization, metric changes, and removals, while logging a message indicating the use of the custom reporter. This change ensures that Kafka metrics are not reported to JMX by default.
app/org · medium confidence
Redesign cluster management UI with feature gates and expanded configuration options
The cluster management views have been redesigned to support feature gates, allowing administrators to enable or disable specific capabilities such as JMX polling, consumer polling, and offset caching. The Add and Update cluster forms now include fields for security protocols, SASL mechanisms, and detailed tuning parameters for thread pools and cache timeouts. Additionally, the cluster list and view pages have been updated to respect feature gates, hiding Zookeeper information when the cluster-manager feature is absent, and the UI has been modernized with Bootstrap 4 components and card-based layouts.
app/views/cluster · medium confidence
Rename to CMAK and add LDAP authentication support
The project has been renamed from Kafka Manager to CMAK (Cluster Manager for Apache Kafka), reflected in the README, configuration keys (e.g., cmak.zkhosts), and documentation. Additionally, the application now supports LDAP authentication, allowing users to authenticate via LDAP servers with optional StartTLS or LDAPS encryption, and can filter access by LDAP groups. The README also updates to reflect support for newer Kafka versions (0.8.x through 0.11.x) and Java 11+.
(repo-wide) · high confidence
Reorganizes base actor classes and adds logging to ZooKeeper retry logic
The base actor classes (BaseActor, BaseCommandActor, BaseQueryActor, BaseQueryCommandActor, CuratorAwareActor) have been moved to the kafka.manager.base package. Additionally, the ZooKeeper client retry logic has been updated to include detailed logging of retry attempts, and the base ZooKeeper path is now defined as a protected method rather than a val.
app/kafka/manager/base · medium confidence
Update navigation templates to use Bootstrap 4/5 classes and semantic HTML5 elements
The navigation templates in app/views/navigation have been updated to use modern Bootstrap classes (e.g., navbar, nav-item, nav-link, dropdown-item) and semantic HTML5 elements (header, nav, aria-labels). Specifically, the breadcrumb component now uses aria-current and breadcrumb-item classes, the cluster and default menus now use navbar-expand and navbar-light classes with proper ARIA attributes for the toggle button, and the menu navigation now uses nav-item and nav-link classes for list items and links, improving accessibility and visual consistency with the current Bootstrap version.
app/views/navigation · high confidence
Test coverage
Added and updated unit tests for Kafka Manager utilities; Added tests for Kafka version management and broker identity parsing; Added tests for KafkaStateCheck API; Expanded test coverage for Kafka Manager actors and metrics; Expanded test infrastructure for Kafka broker and client interactions.
Dependencies
Upgrade to CMAK 3.0.0.7 with modernized dependencies
The project has been renamed to CMAK and bumped to version 3.0.0.7. The build configuration (build.sbt) has been significantly updated: Scala is upgraded from 2.11.4 to 2.12.10, and Play framework dependencies are updated to 2.6.x. Key library upgrades include Akka 2.5.19, Curator 2.12.0, json4s 3.6.5, and Kafka client 2.4.1. Additionally, packaging capabilities for Debian, RPM, and Docker images have been added to the build process.
(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
Score
- CAI 50 → 43 (-7.4)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 98 → 88 (-9.1)
- Architecture 91 (new)
- Maturity 59 → 36 (-22.9)
- Readiness 23 → 39 (+16.2)
- Security 100 → 89 (-11.4)
- Accessibility 34 (new)
Resolved (7)
- Dimension evaluation failed
- No automated tests
- No exposed public API
- No tests found
- Test reliability not included
- attach (cognitive 27) (public/dataTables/javascripts/dataTables.bootstrap4.js)
- attach (cyclomatic 16) (public/dataTables/javascripts/dataTables.bootstrap4.js)
New (101)
- BasicAuthenticationFilterConfiguration.parse (cognitive 17) (app/controllers/BasicAuthenticationFilter.scala)
- Boundary-crossing change coupling: Logkafka.scala ↔ TopicConfigs.scala (app/controllers/Logkafka.scala)
- BrokerViewCacheActor.produceBViewWithBrokerClusterState (cognitive 17) (app/kafka/manager/actor/cluster/BrokerViewCacheActor.scala)
- Change coupling: KafkaStateActor.scala ↔ LogkafkaNewConfigs.scala (app/kafka/manager/actor/cluster/KafkaStateActor.scala)
- Change coupling: KafkaStateActor.scala ↔ TopicConfigs.scala (app/kafka/manager/actor/cluster/KafkaStateActor.scala)
- Change coupling: LogkafkaNewConfigs.scala ↔ TopicConfigs.scala (app/kafka/manager/utils/LogkafkaNewConfigs.scala)
- ClassTooLong: KafkaManager (app/kafka/manager/KafkaManager.scala)
- ClassTooLong: KafkaStateActor (app/kafka/manager/actor/cluster/KafkaStateActor.scala)
- ClusterManagerActor.processCommandRequest (cognitive 32) (app/kafka/manager/actor/cluster/ClusterManagerActor.scala)
- ClusterManagerActor.processCommandRequest (cyclomatic 28) (app/kafka/manager/actor/cluster/ClusterManagerActor.scala)
- ClusterManagerActor.processQueryRequest (cognitive 43) (app/kafka/manager/actor/cluster/ClusterManagerActor.scala)
- ClusterManagerActor.processQueryRequest (cyclomatic 31) (app/kafka/manager/actor/cluster/ClusterManagerActor.scala)
- ClusterTuning.clusterTuningJSONR (cognitive 171) (app/kafka/manager/model/model.scala)
- ClusterTuning.clusterTuningJSONR (cyclomatic 19) (app/kafka/manager/model/model.scala)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Dormant codebase
- Duplicated block (10 lines × 2) (app/kafka/manager/actor/cluster/ClusterManagerActor.scala)
- Duplicated block (10 lines × 2) (app/kafka/manager/utils/one10/GroupMetadataManager.scala)
- Duplicated block (10 lines × 2) (app/kafka/manager/utils/one10/GroupMetadataManager.scala)
- …and 81 more
Architecture
- Containers 0 added · 0 removed · contexts 1 added · 0 removed · edges 0 added · 0 removed
Added bounded contexts (1)
- repository
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
yahoo/CMAK 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 30abfde3d303134db171f140784c5d506885eaf8 — 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.