{"id":34193326,"url":"https://github.com/geekxflood/workspaceone-exporter","last_synced_at":"2026-03-09T16:43:15.230Z","repository":{"id":59779383,"uuid":"539165113","full_name":"geekxflood/workspaceone-exporter","owner":"geekxflood","description":"WorkspaceOne UEM Prometheus exporter","archived":false,"fork":false,"pushed_at":"2024-05-07T07:31:41.000Z","size":4309,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-01T13:06:57.456Z","etag":null,"topics":["airwatch","mobility","prometheus","vmware","vmware-workspace","workspaceone"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/geekxflood.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-20T19:45:47.000Z","updated_at":"2024-09-22T20:47:51.000Z","dependencies_parsed_at":"2023-01-30T23:45:30.757Z","dependency_job_id":"979a5079-dd85-4fa8-b2dd-9e7f48f478e2","html_url":"https://github.com/geekxflood/workspaceone-exporter","commit_stats":{"total_commits":54,"total_committers":3,"mean_commits":18.0,"dds":"0.35185185185185186","last_synced_commit":"6c7466181050565aef6750cf5e95593a15b7b840"},"previous_names":["christopherime/workspaceone-exporter"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/geekxflood/workspaceone-exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekxflood%2Fworkspaceone-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekxflood%2Fworkspaceone-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekxflood%2Fworkspaceone-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekxflood%2Fworkspaceone-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/geekxflood","download_url":"https://codeload.github.com/geekxflood/workspaceone-exporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/geekxflood%2Fworkspaceone-exporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30302712,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T14:33:48.460Z","status":"ssl_error","status_checked_at":"2026-03-09T14:33:48.027Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["airwatch","mobility","prometheus","vmware","vmware-workspace","workspaceone"],"created_at":"2025-12-15T16:36:10.804Z","updated_at":"2026-03-09T16:43:15.217Z","avatar_url":"https://github.com/geekxflood.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WorkspaceOne Prometheus Exporter\n\nWorkspaceOne UEM Prometheus exporter\n\n## Description\n\nThis exporter is used to export WorkspaceOne UEM value to [OpenMetrics](https://openmetrics.io/) format.\n\n## TODO\n\n- [ ] Correct api_calls metrics as it doesn't count the total amount of API calls but only one made by one Prometheus scrape\n- [ ] Validate the TAG_FILTER parsing when an empty parse filter is given\n- [ ] Set some flags to be able to select if we want values per tag or not as it can consume tons of API calls\n- [ ] Introduce a throttling mechanism to avoid overloading the WS1 API\n- [ ] Create a subprocess for querying getting the device's inventory\n- [ ] Timeout the API call and produce a metric of this\n- [ ] Add more metrics (open to suggestions)\n\n## Accessing the metrics\n\n- Default port: 9740\n- Endpoint: /metrics\n\nexample: `http://localhost:9740/metrics`\n\n## Metrics\n\n| Metric | Description | Labels | Type | Implemented |\n| ------ | ----------- | ------ | ---- | ----------- |\n| `api_calls` | The number of API calls made to the WS1 tenant | `none` | Counter | ✅ |\n| `devices_number` | The number of devices in the WS1 tenant | `none` | Gauge | ✅ |\n| `devices_os` | The number of devices per OS in the WS1 tenant | `os` | Gauge | ✅ |\n| `devices_offline` | The number of devices in the WS1 tenant that are offline | `none` | Gauge | ✅ |\n| `devices_online` | The number of devices in the WS1 tenant that are online| `none` | Gauge | ✅ |\n| `tags_sum`| The number of tags in the WS1 tenant | `none` | Gauge | ✅ |\n| `devices_online_tag`| The number of devices online per tag in the WS1 tenant| `tag`, `model` | Gauge | ✅ |\n| `devices_offline_tag`| The number of devices offline per tag in the WS1 tenant | `tag`, `model` | Gauge | ✅ |\n| `devices_offline_1m_tag` | The number of devices offline per tag in the WS1 tenant for more than the last month | `tag`, `model` | Gauge | ✅ |\n\n## Environment variables\n\n| Variable | Description | Type | Comment |\n| -------- | ----------- | ---- | ------- |\n| `WS1_AUTH_KEY` | WorkspaceOne UEM user Auth Key | `string`| |\n| `WS1_TENANT_KEY` | WorkspaceOne UEM tenant key | `string`| |\n| `WS1_URL` | WorkspaceOne UEM base API URL endpoint, must finished by /API | `string`| |\n| `WS1_LGID` | WorkspaceOne UEM highest Group ID | `string`| |\n| `WS1_INTERVAL` | Interval between each WS1 check to it's enrolled devices in minutes | `string`| |\n| `TAG_PARSING` | Enable or disable the tag parsing | `string`| must be true of false |\n| `TAG_FILTER` | String to filter Tag by it | `string`| Will apply a regex filter using this string over all tags |\n| `INSECURE` | Enable or disable the TLS verification | `string`| must be true of false |\n\n## FlowChart\n\n```mermaid\ngraph RL\n    A[Prometheus ] --\u003e B[WorkspaceOne Exporter]\n    B --\u003e C[WorkspaceOne UEM]\n```\n\n## Usage\n\n## Filter by Tag\n\nYou can filter the devices by tag by using the `TAG_FILTER` environment variable.\nIt will enable the system to only keep the tags that contain the string you set.\n\n### Running it locally\n\n```bash\ngo run ./...\n```\n\n### Run it as a Docker container\n\n```bash\ndocker build -t workspaceone-prometheus-exporter .\ndocker run -d -p 9740:9740 workspaceone-prometheus-exporter\n```\n\n![Made with VHS](https://vhs.charm.sh/vhs-6Pw9hpjy1R6vGpvXpP5cAB.gif)\n\n## Useful links\n\n- [WorkspaceOne UEM API Reference](https://docs.vmware.com/en/VMware-Workspace-ONE-UEM/services/UEM_ConsoleBasics/GUID-BF20C949-5065-4DCF-889D-1E0151016B5A.html)\n- [WorkspaceOne UEM API Explorer](https://as1506.awmdm.com/api/help/)\n- [WorkspaceOne API doc pdf (UEM 9.1), is old but still has more interesting details](./doc/VMware%20AirWatch%20REST%20API%20v9_1.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekxflood%2Fworkspaceone-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgeekxflood%2Fworkspaceone-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgeekxflood%2Fworkspaceone-exporter/lists"}