Skip to content
CAI
Software that uses CAICheck a score

Raiffeisen-DGTL/ViennaNET

50.8

Weak · 21 September 2026

35.8k

lines of production code

C#

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

ViennaNET is a comprehensive .NET 8 framework providing infrastructure-level abstractions for distributed systems. It offers modular packages for HTTP client management, multi-database ORM support, and messaging queue adapters for Kafka, ActiveMQ, and MQSeries. The system also includes specialized clients for security scanning, log aggregation, and external configuration sources like Kubernetes and HashiCorp Vault.

How it got here

2020–2021 — framework expansion and .NET 8 upgrade

12 changes.

This period marks the initialization of the ViennaNET project, establishing its core architecture and configuration standards. The team significantly expanded the framework's capabilities by introducing new packages for Excel handling, Kafka messaging, ArcSight integration, and diverse database support, while simultaneously upgrading the entire codebase to .NET 8.

2023–2024 — expansion of configuration and integration libraries

5 changes.

This period focused on expanding the ViennaNET ecosystem with new configuration providers for HashiCorp Vault and Kubernetes, alongside enhanced HTTP client capabilities. The work also introduced a new Kaspersky Scan Engine client library and significantly improved test coverage across multiple components.

Features

Add ActiveMQ default configuration package

A new package, ActiveMqPackage, has been added to the ViennaNET.Messaging.ActiveMQQueue.DefaultConfiguration project. This package registers the ActiveMQ connection factory and message adapter constructors with the SimpleInjector container, providing the default configuration for the ActiveMQ adapter.

src/ViennaNET.Messaging.ActiveMQQueue.DefaultConfiguration · high confidence

Add Apache Kafka queue adapter with transaction support

Introduces a new Kafka queue adapter that enables sending and receiving messages via Apache Kafka. The implementation includes configuration classes (KafkaQueueConfiguration), a message adapter (KafkaQueueMessageAdapter) for standard operations, and a transacted variant (KafkaQueueTransactedMessageAdapter) that supports transactional guarantees. The adapter handles message conversion, header mapping (including correlation IDs), and supports both consumer and producer configurations. Additionally, an Avro message serializer is provided for serializing messages in the Apache Avro format.

src/ViennaNET.Messaging.KafkaQueue · high confidence

Add ArcSight client for sending CEF messages

Introduces the ViennaNET.ArcSight library, providing an implementation of the ArcSightClient to serialize and send standard CEF (Common Event Format) messages. The update includes the core client, message and severity models, serialization logic for RFC 3164 and RFC 5424 syslog formats, and configuration support for TCP, UDP, and local transport protocols.

(repo-wide) · high confidence

Add HTTP client configuration and logging extensions

The ViennaNET.Extensions.Http library now includes support for configuring HTTP clients with retry, timeout, and logging policies. Users can enable Negotiate (Kerberos/NTLM) authentication via new \AuthenticationOptions\ and \NegotiateOptions\ classes. The \ClientOptionsBase\ abstract class introduces properties for retry counts, delays, and timeout settings. Additionally, a \LoggingHttpMessageBodyHandler\ is provided to log request and response payloads at the Trace level, and extension methods are added to register HTTP clients with default policy registries and logging handlers.

(repo-wide) · high confidence

Add Kaspersky Scan Engine client library

Introduced the ViennaNET.KasperskyScanEngine.Client library, providing an HTTP client for interacting with the Kaspersky Scan Engine API. This includes the \IKasperskyScanEngineApi\ interface and its \KseApi\ implementation, which support scanning files and memory blocks, checking URLs, and managing updates. The library also provides configuration options (\KseClientOption\) for setting base addresses and authorization tokens, along with all necessary request and response models for the KSE protocol.

src/ViennaNET.KasperskyScanEngine.Client · high confidence

Add Kubernetes ConfigMap and Secret configuration providers

The ViennaNET.Extensions.Configuration.Kubernetes package now supports loading configuration from Kubernetes ConfigMaps and Secrets. Users can use extension methods like AddJsonConfigMap, AddKeyValueConfigMap, AddJsonSecret, and AddKeyValueSecret to watch and reload configuration from these resources. The provider supports both JSON and key-value data formats, with automatic reloading when the underlying Kubernetes resource changes.

src/ViennaNET.Extensions.Configuration.Kubernetes · high confidence

Add support for DB2, MSSQL, and HTTP client authentication strategies

Introduced new ORM dialects and session factory providers for DB2 and Microsoft SQL Server (MSSQL), enabling database connectivity through NHibernate with platform-specific implementations (Linux and Windows). Additionally, added HTTP client configurators for JWT, NTLM, and No-Authentication strategies, allowing services to forward authorization headers or use default credentials for outgoing HTTP requests. Also added extension methods to register start/stop actions via SimpleInjector.

(repo-wide) · high confidence

Added HashiCorp Vault configuration provider and DB2 OSx ORM dialect

Introduced a new configuration provider for HashiCorp Vault, allowing applications to load secrets as key-value pairs or JSON from Vault, with support for automatic reloading on version changes. The implementation includes a client builder, configuration source, and parser for handling Vault's KV Secrets Engine. Additionally, added DB2 OSx ORM support, including a custom NHibernate dialect, session factory provider, and utility classes to facilitate database connectivity and configuration for DB2 databases.

src/ViennaNET.Extensions.Configuration.HashicorpVault, src/ViennaNET.Orm.DB2.Osx · high confidence

Added IP address resolution and loopback filtering

Introduced new interfaces and implementations for handling local IP addresses. Added ILocalIpProvider and LocalIpProvider to retrieve the current IPv4 address from network adapters, with specific logic to prioritize adapters with a DNS suffix of 'youdomain.ru'. Added ILoopbackIpFilter and LoopbackIpFilter to normalize IP addresses, replacing loopback addresses (e.g., 127.0.0.1, ::1, localhost) with the actual local IP address.

src/ViennaNET.WebApi.Net · high confidence

Deprecated ViennaNET.Mediator package and added default configuration packages for DB2, MSSQL, and Oracle

The ViennaNET.Mediator package is now marked as obsolete and will be removed in November 2023; users should migrate to ViennaNET.Extensions.Mediator. Additionally, new default configuration packages have been added for various database providers: ViennaNET.Messaging.RabbitMQQueue.DefaultConfiguration for RabbitMQ, ViennaNET.Orm.DB2.Lnx.DefaultConfiguration and ViennaNET.Orm.DB2.Win.DefaultConfiguration for DB2 on Linux and Windows respectively, ViennaNET.Orm.MSSQL.DefaultConfiguration for MS SQL, and ViennaNET.Orm.Oracle.DefaultConfiguration for Oracle. These packages register the necessary service implementations for their respective technologies.

(repo-wide) · high confidence

Introduce ViennaNET Excel and Mediator Pipelines components

The ViennaNET.Excel library is added, providing a new API for working with Excel files via the IExcel, IWorkSheet, and IExcelProvider interfaces, backed by NPOI and OpenXml implementations. This includes handling cell coordinates, formulas, styles, and error processing. Additionally, the ViennaNET.Mediator.Pipelines module is introduced, defining interfaces for message pre-processing (IMessagePreProcessor, IBroadcastPreProcessor) and a MessageValidationBehavior to validate messages before processing.

src/ViennaNET.Excel, src/ViennaNET.Mediator.Pipelines · high confidence

Introduce new ORM infrastructure for session management and entity registration

The ViennaNET.Orm library now includes a comprehensive set of new classes and interfaces to manage NHibernate session factories, register entities and commands, and handle domain events. Key additions include the \ApplicationContext\ and \IApplicationContext\ interfaces to register commands, custom queries, and integration events. The \EntityFactoryService\ and \ApplicationContextProvider\ manage the lifecycle and registration of entities and commands. New exception types (\EntityMappingRegistrationException\, \EntityRepositoryException\, etc.) provide specific error handling. Additionally, conventions for mapping boolean, integer, and string types to the database are introduced, along with a diagnostic checker for database connections.

src/ViennaNET.Orm · high confidence

New domain model, messaging, and diagnostic abstractions

This release introduces several new abstractions and implementations to the framework. It adds a Mediator Seedwork package with interfaces for domain events and message collection (IEntityEventPublisher, IEventCollector, IEvent). It introduces a Diagnostic package providing a centralized HealthCheckingService that triggers events on diagnostic failures. It adds an ORM Seedwork package with interfaces for bounded contexts, entity repositories, and entity keys. It also includes a new HttpClient package for building and registering HTTP clients with Polly retry policies, and a Specifications package for composing logical expressions (AND, OR, NOT). Additionally, default configuration packages are added for Kafka and MQSeries messaging, Redis, and PostgreSQL/SQLite ORM providers.

(repo-wide) · high confidence

New fluent and JSON-based configuration for ViennaNET.Logging

The ViennaNET.Logging library introduces a new fluent API for configuring loggers, allowing developers to chain methods like \Enable()\, \AddConsoleListener()\, and \SetTextFileMaxFileSize()\ to build logger configurations in code. Additionally, the library now supports loading logging configuration from JSON files via \LoggerJsonCfgFileConfiguration\, which reads settings into a \LoggerConfiguration\ object. This change also includes new interfaces (\ICategoryLogger\, \ILog\, \ILogConfiguration\) and implementations (e.g., \Log4NetWrapper\, \DefaultCategoryLogger\) that enable this flexible configuration approach while maintaining backward compatibility with existing log4net-based logging.

(repo-wide) · high confidence

Project initialization and repository configuration

The repository was initialized with essential configuration and documentation files. A \.editorconfig\ was added to enforce C\# coding styles and naming conventions. Standard repository files such as \.gitignore\, \README.md\, \RELEASE\_NOTES.md\, \SECURITY.md\, and \CONTRIBUTING.md\ were created to guide contributors and document the project. Additionally, \Directory.Build.props\ was added to configure global MSBuild properties like C\# language version and nullable/implicit usings, while \ViennaNET.sln\ defines the solution structure. The \LICENSE\ file was renamed to \LICENSE.txt\.

(repo-wide) · high confidence

Test coverage

Added unit and integration tests for ViennaNET components

Added comprehensive test coverage for several ViennaNET libraries, including ArcSight, CallContext, Diagnostic, EventSourcing, and HashicorpVault configuration providers. The new test suites validate unit logic for CEF message handling, sender factories, and event mappers, as well as integration scenarios for health checking services and vault configuration loading.

tests · high confidence

Dependencies

Upgrade to .NET 8 and update third-party dependencies

The project has been upgraded to target .NET 8 (net8.0) across all components, including the main library, example projects, and configuration modules. Additionally, third-party dependencies have been updated to their latest stable versions, including Microsoft.Extensions packages (8.0.1), SimpleInjector (5.4.4), and various database drivers such as Npgsql (8.0.2), StackExchange.Redis (2.7.33), and Oracle.ManagedDataAccess.Core (3.21.120).

(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 50 → 51 (+1.2)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 75 → 73 (-1.7)
  • Architecture 90 → 90 (+0.0)
  • Maturity 43 → 43 (+0.0)
  • Readiness 50 → 50 (-0.0)
  • Security 46 → 53 (+6.5)

Resolved (41)

  • Bounded contexts not declared
  • Duplicated block (11 lines × 2) (src/ViennaNET.Messaging.MQSeriesQueue/MqSeriesQueueMessageAdapter.cs)
  • Duplicated block (12 lines × 2) (src/ViennaNET.WebApi.Configurators.HttpClients.Jwt/JwtHttpClientsConfigurator.cs)
  • Duplicated block (18 lines × 2) (src/ViennaNET.Messaging.MQSeriesQueue/MqSeriesQueueConfiguration.cs)
  • Duplicated block (19 lines × 2) (src/ViennaNET.Messaging.MQSeriesQueue/MqSeriesQueueMessageAdapter.cs)
  • High CVE: SixLabors.ImageSharp 2.1.4
  • High CVE: SixLabors.ImageSharp 2.1.4
  • High CVE: SixLabors.ImageSharp 2.1.4
  • High CVE: System.IO.Packaging 8.0.0
  • High CVE: System.IO.Packaging 8.0.0
  • High CVE: System.Text.Json 8.0.0
  • High CVE: System.Text.Json 8.0.0
  • High CVE: System.Text.Json 8.0.3
  • High CVE: System.Text.Json 8.0.3
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 21 more

New (168)

  • CoverageExclusion (src/ViennaNET.Logging/DefaultCategoryLogger.cs)
  • CoverageExclusion (src/ViennaNET.Logging/Log4NetImpl/CategoryLogger.cs)
  • CoverageExclusion (src/ViennaNET.Logging/Logging.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.ActiveMQQueue.DefaultConfiguration/ActiveMqPackage.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.DefaultConfiguration/ContainerExtensions.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.KafkaQueue/KafkaQueueMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.KafkaQueue/KafkaQueueMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.KafkaQueue/KafkaQueueMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.KafkaQueue/KafkaQueueMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.MQSeriesQueue/MqSeriesQueueSubscribingMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.MQSeriesQueue/MqSeriesQueueSubscribingMessageAdapter.cs)
  • CoverageExclusion (src/ViennaNET.Messaging.RabbitMQQueue/RabbitMqConnectionFactory.cs)
  • CoverageExclusion (src/ViennaNET.Messaging/Listening/QueueListener.cs)
  • CoverageExclusion (src/ViennaNET.Redis/Implementation/Default/RedisDatabaseProvider.cs)
  • CoverageExclusion (src/ViennaNET.WebApi.Configurators.Diagnostic/CompanyDiagnosticConfigurator.cs)
  • CoverageExclusion (src/ViennaNET.WebApi.WindowsHosting/WindowsHostingExtensions.cs)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 3) (src/ViennaNET.Word/Document.cs)
  • Duplicated block (103–105 lines × 2) (src/ViennaNET.Redis/IRedisServer.cs)
  • …and 148 more

API surface

  • Unchanged — 8 HTTP endpoints

Architecture

  • Unchanged — 5 containers · 0 contexts · 0 edges

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

Survey your own repository

Raiffeisen-DGTL/ViennaNET 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 21 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 88900951349da7def912189ccbf5306271fda82c — 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-28e75b8e3254.