Name | analytics-ingest JSON |
Version |
0.1.69
JSON |
| download |
home_page | None |
Summary | - Integeration test for signal added. |
upload_time | 2025-07-30 11:09:51 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# 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
```bash
pip install analytics-ingest
```
---
## 🚀 Usage
### Basic Example
```python
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([
{"time": "2025-07-28T12:34:56.789Z", "latitude": 37.7749, "longitude": -122.4194, "accuracy": 10.5, "altitude": 120.3, "speed": 45.2, "bearing": 75.0, "available": {"accuracy": True, "altitude": True, "bearing": False, "speed": True, "time": True}},
{"time": "2025-07-28T12:35:56.789Z", "latitude": 37.7750, "longitude": -122.4195}
# ... more GPS ...
])
# 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 identifiers
- `graphql_endpoint`: URL to your GraphQL backend
- `batch_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 `print` statements 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
Raw data
{
"_id": null,
"home_page": null,
"name": "analytics-ingest",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": null,
"author": null,
"author_email": "Haseeb Saif Ullah <hsaif@intrepidcs.com>",
"download_url": "https://files.pythonhosted.org/packages/fc/4b/a95e3824ad355e7bdc9d9cbd18b12b226a7fefaf2ee94b6fcbbc7086b526/analytics_ingest-0.1.69.tar.gz",
"platform": null,
"description": "# Analytics Ingest Client\n\nA lightweight Python library to batch and push automotive telemetry data\u2014such as signals, Diagnostic Trouble Codes (DTCs), GPS data, and network statistics\u2014to a GraphQL backend.\n\n---\n\n## \ud83d\udd27 Features\n\n- Supports Python 3.11+\n- Clean, single-class interface: `IcsAnalytics`\n- In-memory caching for resolved IDs (message id or configuration)\n- Batching support (by interval, count, or signal limit)\n- Async-safe request queuing (only 1 request at a time)\n- Minimal dependency footprint\n- Easy to test and integrate\n- Supports signals, DTCs, GPS, and network stats ingestion\n\n---\n\n## \ud83d\udce6 Installation\n\n```bash\npip install analytics-ingest\n```\n\n---\n\n## \ud83d\ude80 Usage\n\n### Basic Example\n\n```python\nfrom analytics_ingest import IcsAnalytics\n\nclient = IcsAnalytics(\n device_id=123,\n vehicle_id=456,\n fleet_id=789,\n org_id=1011,\n graphql_endpoint=\"https://your-backend/graphql\",\n batch_size=100,\n batch_interval_seconds=10,\n max_signal_count=100\n)\n\n# Add signals (list of dicts)\nclient.add_signal([\n {'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'}]},\n # ... more signals ...\n])\n\n# Add DTCs (list of dicts)\nclient.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'}]} \n# ... more DTCs ...\n])\n\n# Add GPS data (dict)\nclient.add_gps([\n {\"time\": \"2025-07-28T12:34:56.789Z\", \"latitude\": 37.7749, \"longitude\": -122.4194, \"accuracy\": 10.5, \"altitude\": 120.3, \"speed\": 45.2, \"bearing\": 75.0, \"available\": {\"accuracy\": True, \"altitude\": True, \"bearing\": False, \"speed\": True, \"time\": True}},\n {\"time\": \"2025-07-28T12:35:56.789Z\", \"latitude\": 37.7750, \"longitude\": -122.4195}\n # ... more GPS ...\n])\n\n\n# Add network stats (dict)\nclient.add_network_stats({\n \"name\": \"CAN1\",\n \"vehicleId\": 456,\n \"uploadId\": 1,\n \"totalMessages\": 1000,\n \"matchedMessages\": 950,\n \"unmatchedMessages\": 50,\n \"errorMessages\": 0,\n \"longMessageParts\": 0,\n \"rate\": 500.0\n})\n\n# Graceful shutdown (flushes any remaining data)\nclient.close()\n```\n\n---\n\n## \u2699\ufe0f Configuration\n\nYou can configure the client via constructor arguments or environment variables (e.g., `GRAPH_ENDPOINT`).\n\n- `device_id`, `vehicle_id`, `fleet_id`, `org_id`: Required identifiers\n- `graphql_endpoint`: URL to your GraphQL backend\n- `batch_size`: Number of items per batch (default: 100)\n- `batch_interval_seconds`: Max seconds between batch sends (default: 10)\n- `max_signal_count`: Max signals per batch (default: 100)\n\n---\n\n## \ud83d\udee0\ufe0f Error Handling & Logging\n\n- Uses exceptions for invalid input or backend errors\n- Replaceable `print` statements with logging recommended for production\n- Retries failed batch sends on next interval\n\n---\n\n## \ud83e\uddea Testing\n\nRun all test cases:\n\n```\nPYTHONPATH=src python3 -m unittest discover -s tests -v\n```\n\nBuild and upload package:\n\n```\npython3 -m build\npython -m twine upload dist/*\n```\n\n---\n\n## \ud83d\udca1 Improvements & Roadmap\n\n- Add more usage examples and API documentation\n- Integrate a logging framework\n- Increase test coverage and add integration tests\n- Allow dynamic runtime configuration\n- Expose a fully async API\n- Add metrics and monitoring hooks\n- Enforce linting and type checking in CI\n\n---\n\n## \ud83e\udd1d Contributing\n\nPull requests and issues are welcome! Please add tests for new features and follow PEP8 style guidelines.\n\n---\n\n## \ud83d\udcc4 License\n\nMIT License\nReadme.txt\n4 KB\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "- Integeration test for signal added.",
"version": "0.1.69",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "fb5241b2a0501b07aecb63c40a31c37f8ad6e4121021c44cbc4121ae690bc56e",
"md5": "880c442aa7e4dcc530681a88844e214b",
"sha256": "62ca620c19a1d7bc8493b3af4086036a9a28b7822b81640375b405a5c0941cc9"
},
"downloads": -1,
"filename": "analytics_ingest-0.1.69-py3-none-any.whl",
"has_sig": false,
"md5_digest": "880c442aa7e4dcc530681a88844e214b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 23326,
"upload_time": "2025-07-30T11:09:50",
"upload_time_iso_8601": "2025-07-30T11:09:50.346367Z",
"url": "https://files.pythonhosted.org/packages/fb/52/41b2a0501b07aecb63c40a31c37f8ad6e4121021c44cbc4121ae690bc56e/analytics_ingest-0.1.69-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fc4ba95e3824ad355e7bdc9d9cbd18b12b226a7fefaf2ee94b6fcbbc7086b526",
"md5": "e0239a65a95b9c4f6350c872daab45a7",
"sha256": "cef31cef1fa1f831547c0847bbe0ab3d038b7e64cb1b2c7c1fe890434ba4aafd"
},
"downloads": -1,
"filename": "analytics_ingest-0.1.69.tar.gz",
"has_sig": false,
"md5_digest": "e0239a65a95b9c4f6350c872daab45a7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 19525,
"upload_time": "2025-07-30T11:09:51",
"upload_time_iso_8601": "2025-07-30T11:09:51.744259Z",
"url": "https://files.pythonhosted.org/packages/fc/4b/a95e3824ad355e7bdc9d9cbd18b12b226a7fefaf2ee94b6fcbbc7086b526/analytics_ingest-0.1.69.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-30 11:09:51",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "analytics-ingest"
}