- Signal validation added before GraphQL call to avoid unnecessary request failures.
Project description
Analytics Ingest Client
A lightweight Python library to batch and push automotive telemetry data—such as signals, Diagnostic Trouble Codes (DTCs), GPS data, and network statistics—to a GraphQL backend.
🔧 Features
- Supports Python 3.11+
- Clean, single-class interface:
IcsAnalytics - In-memory caching for resolved IDs (message id or configuration)
- Batching support (by interval, count, or signal limit)
- Async-safe request queuing (only 1 request at a time)
- Minimal dependency footprint
- Easy to test and integrate
- Supports signals, DTCs, GPS, and network stats ingestion
📦 Installation
pip install analytics-ingest
🚀 Usage
Basic Example
from analytics_ingest import IcsAnalytics
client = IcsAnalytics(
device_id=123,
vehicle_id=456,
fleet_id=789,
org_id=1011,
graphql_endpoint="https://your-backend/graphql",
batch_size=100,
batch_interval_seconds=10,
max_signal_count=100
)
# Add signals (list of dicts)
client.add_signal([
{'name': 'VehicleIdentificationNumber', 'unit': '', 'messageName': 'BusQuery_IDDecoding_F190_VSSAL', 'networkName': 'Cluster_6_TestTool', 'ecuName': '', 'arbId': '', 'fileId': '1234', 'paramType': 'TEXT', 'signalType': 'DID', 'messageDate': '2025-07-15T01:40:00.000000', 'paramId': 'F190', 'data': [{'value': 0.04, 'time': '1970-01-07T18:28:54Z'}]},
# ... more signals ...
])
# Add DTCs (list of dicts)
client.add_dtc([{'messageName': 'DTC Message99B049', 'name': 'DTC Message99B049', 'networkName': 'Cluster_6_TestTool', 'ecuName': 'VCU_Android_GAS', 'ecuId': '14DA80F1', 'messageDate': '2025-07-15T01:42:20.385429', 'fileId': '1234', 'data': [{'dtcId': 'B19B0-49', 'description': 'Head-Up Display - Internal Electronic Failure', 'status': '2F', 'time': '2025-07-15T01:42:15.979524'}]}
# ... more DTCs ...
])
# Add GPS data (dict)
client.add_gps({
"latitude": 37.7749,
"longitude": -122.4194,
"timestamp": "2024-01-01T00:00:00Z"
})
# Add network stats (dict)
client.add_network_stats({
"name": "CAN1",
"vehicleId": 456,
"uploadId": 1,
"totalMessages": 1000,
"matchedMessages": 950,
"unmatchedMessages": 50,
"errorMessages": 0,
"longMessageParts": 0,
"rate": 500.0
})
# Graceful shutdown (flushes any remaining data)
client.close()
⚙️ Configuration
You can configure the client via constructor arguments or environment variables (e.g., GRAPH_ENDPOINT).
device_id,vehicle_id,fleet_id,org_id: Required identifiersgraphql_endpoint: URL to your GraphQL backendbatch_size: Number of items per batch (default: 100)batch_interval_seconds: Max seconds between batch sends (default: 10)max_signal_count: Max signals per batch (default: 100)
🛠️ Error Handling & Logging
- Uses exceptions for invalid input or backend errors
- Replaceable
printstatements with logging recommended for production - Retries failed batch sends on next interval
🧪 Testing
Run all test cases:
PYTHONPATH=src python3 -m unittest discover -s tests -v
Build and upload package:
python3 -m build
python -m twine upload dist/*
💡 Improvements & Roadmap
- Add more usage examples and API documentation
- Integrate a logging framework
- Increase test coverage and add integration tests
- Allow dynamic runtime configuration
- Expose a fully async API
- Add metrics and monitoring hooks
- Enforce linting and type checking in CI
🤝 Contributing
Pull requests and issues are welcome! Please add tests for new features and follow PEP8 style guidelines.
📄 License
MIT License Readme.txt 4 KB
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file analytics_ingest-0.1.62.tar.gz.
File metadata
- Download URL: analytics_ingest-0.1.62.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c17a7439256258761cdcd4084a479f688ee356c1e5d3eca480007dee4972cd5e
|
|
| MD5 |
77812e31cdfd3d6ef56ee86f4b61f10f
|
|
| BLAKE2b-256 |
dca097f59db3f85ce98c53b4a46b8e24d3ac572095d2abf2ccfb0721204082c8
|
File details
Details for the file analytics_ingest-0.1.62-py3-none-any.whl.
File metadata
- Download URL: analytics_ingest-0.1.62-py3-none-any.whl
- Upload date:
- Size: 24.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8380e0c17bb83956034a69308902957b36dcd6a9eb49a37cc14def6c9af565b4
|
|
| MD5 |
5f1c397316b3d6b586a9f43d240a6374
|
|
| BLAKE2b-256 |
67e1ecbbc16c5d0f6e64970088d0b6a7aed9ef3435ff731b57d423c307fd1ea5
|