{"id":15107591,"url":"https://github.com/moosetechnology/famix-opentelemetry","last_synced_at":"2025-10-23T02:31:16.794Z","repository":{"id":96745261,"uuid":"602022763","full_name":"moosetechnology/Famix-OpenTelemetry","owner":"moosetechnology","description":"Famix metamodel for OpenTelemetry","archived":false,"fork":false,"pushed_at":"2024-10-28T14:00:42.000Z","size":194,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":14,"default_branch":"main","last_synced_at":"2024-10-29T20:32:06.350Z","etag":null,"topics":["meta-model","opentelemetry","pharo","smalltalk","traces"],"latest_commit_sha":null,"homepage":"","language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moosetechnology.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":"2023-02-15T10:35:22.000Z","updated_at":"2024-10-28T14:00:47.000Z","dependencies_parsed_at":"2023-10-05T11:05:30.001Z","dependency_job_id":"ff4ec936-30b0-4b7a-b603-c41fd6fb3eb0","html_url":"https://github.com/moosetechnology/Famix-OpenTelemetry","commit_stats":{"total_commits":112,"total_committers":6,"mean_commits":"18.666666666666668","dds":0.4107142857142857,"last_synced_commit":"e8b9072985b7806f2bafbea79f3acbc9154e3996"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moosetechnology%2FFamix-OpenTelemetry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moosetechnology%2FFamix-OpenTelemetry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moosetechnology%2FFamix-OpenTelemetry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moosetechnology%2FFamix-OpenTelemetry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moosetechnology","download_url":"https://codeload.github.com/moosetechnology/Famix-OpenTelemetry/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237763856,"owners_count":19362310,"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":["meta-model","opentelemetry","pharo","smalltalk","traces"],"created_at":"2024-09-25T21:25:49.345Z","updated_at":"2025-10-23T02:31:11.502Z","avatar_url":"https://github.com/moosetechnology.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Moose version](https://img.shields.io/badge/Moose-10-%23aac9ff.svg)](https://github.com/moosetechnology/Moose)\n[![Moose version](https://img.shields.io/badge/Moose-11-%23aac9ff.svg)](https://github.com/moosetechnology/Moose)\n![Build Info](https://github.com/moosetechnology/Famix-OpenTelemetry/workflows/CI/badge.svg)\n[![Coverage Status](https://coveralls.io/repos/github/moosetechnology/Famix-OpenTelemetry/badge.svg?branch=main)](https://coveralls.io/github/moosetechnology/Famix-OpenTelemetry?branch=main)\n\n# Famix-OpenTelemetry\n\nFamix metamodel for [OpenTelemetry](https://opentelemetry.io) traces.\n\n## Installation\n\n```st\nMetacello new\n  githubUser: 'moosetechnology' project: 'Famix-OpenTelemetry' commitish: 'main' path: 'src';\n  baseline: 'FamixOpenTelemetry';\n  load\n```\n\n## Importing\n\nOpenTelemetry traces can be stored in a variety of telemetry backends, such as Zipkin or any OTelCollector.\nTo support this modularity, the importer works like an ELT pipeline.  \n- **Extractors** retrieve the raw trace data from a source outside the image and deserialize it.\nSome extractors can output the retrieved data to a file, by configuring them with `outputFilename:`.\nThe data can then be extracted from the file, for example with `OTelJSONFileExtractor`.  \n- **Loaders** understand a specific raw data structure and use it to build the model.  \n- **Transformers** are optional, they can process or apply modifications to the trace model.\n\n```st\nimporter := OpenTelemetryImporter new.\nimporter\n  extractor: (OTelZipkinExtractor new endpoint: 'http://localhost:9411');\n  loader: OTelZipkinLoader new;\n  transformers: { OTelTagTransformer new\n      predicate: [ :tag | \"match a tag\" ];\n      block: [ :value | \"compute its new value\" ] }.\nimporter import. \"returns a filled FamixOTelModel\"\n```\n\n### Supported Telemetry Aggregators\n\n| Aggregator | Baseline |\n|---|---|\n| Zipkin | default |\n| Elasticsearch | `elasticsearch` |\n\n### Available Transformers\n\n| Transformer | Description | Baseline |\n|---|---|---|\n| TagTransformer | modifies `Span` tags that match a predicate with a pluggable block | default |\n| FamixLinker | links `Span`s to their origin in a Famix model | default |\n| FamixValueLinker | links origin and generates a FamixValue model from serialized arguments and result | `value` |\n\n### Examples\n\n#### Example with ElasticSearch\n\n```st\nMetacello new\n  githubUser: 'moosetechnology' project: 'Famix-OpenTelemetry' commitish: 'main' path: 'src';\n  baseline: 'FamixOpenTelemetry';\n  load: 'elasticsearch'.\n\nelasticExtractor := OTelElasticsearchExtractor new.\nelasticExtractor\n  beHttps;\n  endpoint: 'endpointToElastic';\n  index: '\u003cyour index name\u003e';\n  apiKey: '\u003cyour api key\u003e';\n  size: 30.\n\nimporter := OpenTelemetryImporter new.\nimporter\n  extractor: elasticExtractor;\n  loader: OTelElasticsearchOtelLoader new.\nmodel := importer import. \"returns a filled FamixOTelModel\"\n\nmodel allWithType: FamixOTelTrace.\n```\n\n## Modeling Values\n\nIt is possible to model serialized runtime values stored in traces using [Famix-Value](https://github.com/moosetechnology/Famix-Value).\nTo enable this feature, load the `value` group:\n\n```st\nMetacello new\n  githubUser: 'moosetechnology' project: 'Famix-OpenTelemetry' commitish: 'main' path: 'src';\n  baseline: 'FamixOpenTelemetry';\n  load: 'value'\n```\n\nA transformer, such as an instance of `OTelFamixValueLinker`, can be added to the import pipeline to create a FamixValue model.  \nThe values can also be linked to the model of the application that produced them by configuring the given FamixValue importer.  \nIn order to enable navigation between the traces and the values when inspecting entities, they must coexist in the same `FamixOTelValueModel`.  \n\n```st\ntraceModel := FamixOTelValueModel new.\njavaModel := MooseModel root at: 1. \"model of the Java application that produced the traces\"\nimporter loader: (OTelZipkinLoader new model: traceModel).\nimporter transformers: { OTelFamixValueLinker new\n    \"keys of tags containing the relevant values\"\n    classKey: 'class';\n    methodKey: 'method';\n    argsKey: 'arguments';\n    resultKey: 'result';\n    \"configure a FamixValue importer, this one understands JSON from the Jackson Java library\"\n    importer: (FamixValueJavaJacksonImporter new\n        model: traceModel;\n        \"configure an entity finder, this one is for searching a FamixJava model\"\n        entityFinder: (FamixJavaEntityFinder new model: javaModel)) }.\nimporter import. \"fills traceModel with FamixOTel and FamixValue entities\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoosetechnology%2Ffamix-opentelemetry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoosetechnology%2Ffamix-opentelemetry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoosetechnology%2Ffamix-opentelemetry/lists"}