# darynongera/c22 architecture

> Architecture diagram of the GitHub repository darynongera/c22, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/darynongera/c22
- Repository: https://github.com/darynongera/c22

## Overview

This Android foreground service collects device health, network, process/app, location, and application-defined events, then batches JSON telemetry for delivery to a configurable HTTP(S) endpoint. The main path is service startup through JNI to the native engine, scheduled collection or location/event input, buffering, and HTTP posting. The graph retains distinct collection stages and the Android integration layer. Runtime flow is based on the README and sampled sources; location-listener and JNI bridge details are documented or indicated by the tree but their source was not sampled.

Main entry points: [`src/core/engine.cpp`](https://github.com/darynongera/c22/blob/master/src/core/engine.cpp) (Telemetry engine), [`java/com/telemetry/TelemetryService.java`](https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryService.java) (Foreground service), [`src/jni/native_bridge.cpp`](https://github.com/darynongera/c22/blob/master/src/jni/native_bridge.cpp) (JNI bridge), [`java/com/telemetry/TelemetryLocationListener.java`](https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryLocationListener.java) (Location listener)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android lifecycle"]
  node_telemetry_service["Foreground service"]
  node_boot_receiver["Boot receiver<br/>[BootReceiver.java]"]
  node_location_listener["Location listener"]
  node_telemetry_api["Java native API<br/>[Telemetry.java]"]
  node_jni_bridge["JNI bridge<br/>[native_bridge.cpp]"]
  node_android_context["Android context"]
end

subgraph group_collection["Telemetry collection"]
  node_scheduler["Sampler scheduler<br/>[scheduler.cpp]"]
  node_procfs["Procfs collectors<br/>[procfs.cpp]"]
end

subgraph group_engine["Native engine"]
  node_engine["Telemetry engine<br/>[engine.cpp]"]
  node_event_api["Custom event API<br/>[event.h]"]
  node_buffer["Message buffer<br/>[buffer.cpp]"]
end

subgraph group_delivery["Transport"]
  node_http_client["HTTP client<br/>[http_client.h]"]
  node_curl_client["Curl transport<br/>[curl_client.cpp]"]
end

node_android_os(("Android OS"))
node_app_code(("Application C++"))
node_endpoint(("Telemetry endpoint"))
node_system_data[("Android system data")]

node_android_os -->|"boot broadcast"| node_boot_receiver
node_boot_receiver -->|"starts"| node_telemetry_service
node_android_os -->|"starts service"| node_telemetry_service
node_telemetry_service -->|"attaches and starts"| node_telemetry_api
node_telemetry_service -->|"registers updates"| node_location_listener
node_android_os -->|"location fixes"| node_location_listener
node_location_listener -->|"emits location"| node_telemetry_api
node_telemetry_api -->|"native calls"| node_jni_bridge
node_jni_bridge -->|"starts and stops"| node_engine
node_jni_bridge -->|"sets context"| node_android_context
node_app_code -->|"emits events"| node_event_api
node_event_api -->|"queues event"| node_engine
node_engine -->|"registers samplers"| node_scheduler
node_scheduler -->|"runs callbacks"| node_engine
node_engine -->|"reads metrics"| node_procfs
node_procfs -->|"reads proc and sys"| node_system_data
node_engine -->|"queries network and apps"| node_android_context
node_android_context -->|"queries Android APIs"| node_android_os
node_engine -->|"enqueues messages"| node_buffer
node_engine -->|"drains batches"| node_buffer
node_engine -->|"posts batches"| node_http_client
node_http_client -->|"implemented by"| node_curl_client
node_curl_client -->|"POSTs JSON"| node_endpoint

click node_telemetry_service "https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryService.java"
click node_boot_receiver "https://github.com/darynongera/c22/blob/master/java/com/telemetry/BootReceiver.java"
click node_location_listener "https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryLocationListener.java"
click node_telemetry_api "https://github.com/darynongera/c22/blob/master/java/com/telemetry/Telemetry.java"
click node_jni_bridge "https://github.com/darynongera/c22/blob/master/src/jni/native_bridge.cpp"
click node_android_context "https://github.com/darynongera/c22/blob/master/src/jni/android_context.cpp"
click node_scheduler "https://github.com/darynongera/c22/blob/master/src/core/scheduler.cpp"
click node_procfs "https://github.com/darynongera/c22/blob/master/src/core/procfs.cpp"
click node_engine "https://github.com/darynongera/c22/blob/master/src/core/engine.cpp"
click node_event_api "https://github.com/darynongera/c22/blob/master/include/telemetry/event.h"
click node_buffer "https://github.com/darynongera/c22/blob/master/src/core/buffer.cpp"
click node_http_client "https://github.com/darynongera/c22/blob/master/src/transport/http_client.h"
click node_curl_client "https://github.com/darynongera/c22/blob/master/src/transport/curl_client.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_telemetry_service,node_boot_receiver,node_location_listener,node_telemetry_api,node_jni_bridge,node_android_context toneBlue
class node_scheduler,node_procfs,node_system_data toneAmber
class node_engine,node_event_api,node_buffer toneMint
class node_http_client,node_curl_client toneRose
class node_android_os,node_app_code,node_endpoint toneIndigo
```

## Components

### Android lifecycle

- [Foreground service](https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryService.java): `java/com/telemetry/TelemetryService.java`
- [Boot receiver](https://github.com/darynongera/c22/blob/master/java/com/telemetry/BootReceiver.java): `java/com/telemetry/BootReceiver.java`
- [Location listener](https://github.com/darynongera/c22/blob/master/java/com/telemetry/TelemetryLocationListener.java): `java/com/telemetry/TelemetryLocationListener.java`
- [Java native API](https://github.com/darynongera/c22/blob/master/java/com/telemetry/Telemetry.java): `java/com/telemetry/Telemetry.java`
- [JNI bridge](https://github.com/darynongera/c22/blob/master/src/jni/native_bridge.cpp): `src/jni/native_bridge.cpp`
- [Android context](https://github.com/darynongera/c22/blob/master/src/jni/android_context.cpp): `src/jni/android_context.cpp`

### Telemetry collection

- [Sampler scheduler](https://github.com/darynongera/c22/blob/master/src/core/scheduler.cpp): `src/core/scheduler.cpp`
- [Procfs collectors](https://github.com/darynongera/c22/blob/master/src/core/procfs.cpp): `src/core/procfs.cpp`

### Native engine

- [Telemetry engine](https://github.com/darynongera/c22/blob/master/src/core/engine.cpp): `src/core/engine.cpp`
- [Custom event API](https://github.com/darynongera/c22/blob/master/include/telemetry/event.h): `include/telemetry/event.h`
- [Message buffer](https://github.com/darynongera/c22/blob/master/src/core/buffer.cpp): `src/core/buffer.cpp`

### Transport

- [HTTP client](https://github.com/darynongera/c22/blob/master/src/transport/http_client.h): `src/transport/http_client.h`
- [Curl transport](https://github.com/darynongera/c22/blob/master/src/transport/curl_client.cpp): `src/transport/curl_client.cpp`

### Other components

- **Android OS**
- **Application C++**
- **Telemetry endpoint**
- **Android system data**

## Connections

- Android OS → Boot receiver: boot broadcast
- Boot receiver → Foreground service: starts
- Android OS → Foreground service: starts service
- Foreground service → Java native API: attaches and starts
- Foreground service → Location listener: registers updates
- Android OS → Location listener: location fixes
- Location listener → Java native API: emits location
- Java native API → JNI bridge: native calls
- JNI bridge → Telemetry engine: starts and stops
- JNI bridge → Android context: sets context
- Application C++ → Custom event API: emits events
- Custom event API → Telemetry engine: queues event
- Telemetry engine → Sampler scheduler: registers samplers
- Sampler scheduler → Telemetry engine: runs callbacks
- Telemetry engine → Procfs collectors: reads metrics
- Procfs collectors → Android system data: reads proc and sys
- Telemetry engine → Android context: queries network and apps
- Android context → Android OS: queries Android APIs
- Telemetry engine → Message buffer: enqueues messages
- Telemetry engine → Message buffer: drains batches
- Telemetry engine → HTTP client: posts batches
- HTTP client → Curl transport: implemented by
- Curl transport → Telemetry endpoint: POSTs JSON
