{"id":26895230,"url":"https://github.com/pforhan/osay","last_synced_at":"2025-06-19T17:39:38.653Z","repository":{"id":284820682,"uuid":"955644305","full_name":"pforhan/osay","owner":"pforhan","description":"A way to wrangle your mobile telemetry","archived":false,"fork":false,"pushed_at":"2025-03-27T20:33:15.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T21:31:28.081Z","etag":null,"topics":["kotlin","logging","mobile","observability","telemetry"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pforhan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-27T00:58:03.000Z","updated_at":"2025-03-27T20:33:19.000Z","dependencies_parsed_at":"2025-03-27T21:32:25.151Z","dependency_job_id":"b6d40b97-04d4-45eb-9614-3652a25949ac","html_url":"https://github.com/pforhan/osay","commit_stats":null,"previous_names":["pforhan/osay"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pforhan/osay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pforhan%2Fosay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pforhan%2Fosay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pforhan%2Fosay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pforhan%2Fosay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pforhan","download_url":"https://codeload.github.com/pforhan/osay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pforhan%2Fosay/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260797660,"owners_count":23064831,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kotlin","logging","mobile","observability","telemetry"],"created_at":"2025-04-01T01:54:49.242Z","updated_at":"2025-06-19T17:39:33.639Z","avatar_url":"https://github.com/pforhan.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# osay\n\nA way to wrangle mobile telemetry\n\nThere's lots of articles telling developers they're doing telemetry wrong. While that may or may not\nbe true for a given project, you need a way to wrangle things in the meantime without tying code\nfirmly to a vendor platform.\n\nWhy not use the power of all these connected computers to make smart decisions about telemetry as\nthe data is emitted?\n\nHighlights\n----------\n\n* Simple api, easy connections to existing and new systems\n* On-device decisions\n* Hot code deploy\n\nArchitecture\n------------\n\n| Term | Definition |\n| --- | --- |\n| Events | things that happen |\n| Contexts | common data about the sender or session that one or more events may be associated with. Contexts can be attached to the all events or to only events in a specific channel. |\n| Channels | places events flow to |\n| Deciders | what should be done with events |\n\n1. Events flow into channels -- generally one event type per channel.\n2. Current context data is attached upon emission.\n3. Channels are a stream of events with logic (deciders) attached to them.\n4. Deciders can store, aggregate, and forward events. They can also be contacted later to trigger\n   different outcomes or to update their logic.\n\nReasoning\n---------\n\nA typical telemetry flow is something like:\n\n```\nsomething happens -\u003e emit event -\u003e enrich and convert to target format -\u003e batch -\u003e send\n```\n\nNo matter how events are defined (data class or dictionary/map), as a process of\nconverting to the target format, events are often split to key-value pairs and pushed into JSON and\nsimilar formats. Osay events are fundamentally themselves key-value pairs so they can be easily\nintegrated into this flow. The intention is to provide a way to do this consistently across all\nevents, and also provide a place for on-device thinking to occur.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpforhan%2Fosay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpforhan%2Fosay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpforhan%2Fosay/lists"}