[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"github-stars":3,"directus-extension-prometheus":110,"marketplace-site-banners":273},{"id":4,"node_id":5,"name":6,"full_name":7,"private":8,"owner":9,"html_url":27,"description":28,"fork":8,"url":29,"forks_url":30,"keys_url":31,"collaborators_url":32,"teams_url":33,"hooks_url":34,"issue_events_url":35,"events_url":36,"assignees_url":37,"branches_url":38,"tags_url":39,"blobs_url":40,"git_tags_url":41,"git_refs_url":42,"trees_url":43,"statuses_url":44,"languages_url":45,"stargazers_url":46,"contributors_url":47,"subscribers_url":48,"subscription_url":49,"commits_url":50,"git_commits_url":51,"comments_url":52,"issue_comment_url":53,"contents_url":54,"compare_url":55,"merges_url":56,"archive_url":57,"downloads_url":58,"issues_url":59,"pulls_url":60,"milestones_url":61,"notifications_url":62,"labels_url":63,"releases_url":64,"deployments_url":65,"created_at":66,"updated_at":67,"pushed_at":68,"git_url":69,"ssh_url":70,"clone_url":71,"svn_url":27,"homepage":72,"size":73,"stargazers_count":74,"watchers_count":74,"language":75,"has_issues":76,"has_projects":76,"has_downloads":76,"has_wiki":8,"has_pages":8,"has_discussions":76,"forks_count":77,"mirror_url":78,"archived":8,"disabled":8,"open_issues_count":79,"license":80,"allow_forking":76,"is_template":8,"web_commit_signoff_required":8,"has_pull_requests":76,"pull_request_creation_policy":85,"topics":86,"visibility":26,"forks":77,"open_issues":79,"watchers":74,"default_branch":106,"temp_clone_token":78,"custom_properties":107,"organization":108,"network_count":77,"subscribers_count":109},7122594,"MDEwOlJlcG9zaXRvcnk3MTIyNTk0","directus","directus\u002Fdirectus",false,{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},15967950,"MDEyOk9yZ2FuaXphdGlvbjE1OTY3OTUw","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F15967950?v=4","","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus","https:\u002F\u002Fgithub.com\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowers","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Ffollowing{\u002Fother_user}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fgists{\u002Fgist_id}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fstarred{\u002Fowner}{\u002Frepo}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fsubscriptions","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Forgs","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Frepos","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Fevents{\u002Fprivacy}","https:\u002F\u002Fapi.github.com\u002Fusers\u002Fdirectus\u002Freceived_events","Organization","public","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus","The flexible backend for all your projects 🐰 Turn your DB into a headless CMS, admin panels, or apps with a custom UI, instant APIs, auth & more.","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fforks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fkeys{\u002Fkey_id}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcollaborators{\u002Fcollaborator}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fteams","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fhooks","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fevents{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fevents","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fassignees{\u002Fuser}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fbranches{\u002Fbranch}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Ftags","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fblobs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftags{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Frefs{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Ftrees{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstatuses\u002F{sha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flanguages","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fstargazers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontributors","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscribers","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fsubscription","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fgit\u002Fcommits{\u002Fsha}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues\u002Fcomments{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcontents\u002F{+path}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fcompare\u002F{base}...{head}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmerges","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002F{archive_format}{\u002Fref}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdownloads","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fissues{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fpulls{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fmilestones{\u002Fnumber}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fnotifications{?since,all,participating}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Flabels{\u002Fname}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Freleases{\u002Fid}","https:\u002F\u002Fapi.github.com\u002Frepos\u002Fdirectus\u002Fdirectus\u002Fdeployments","2012-12-12T01:35:36Z","2026-07-18T05:08:19Z","2026-07-17T21:10:45Z","git:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","git@github.com:directus\u002Fdirectus.git","https:\u002F\u002Fgithub.com\u002Fdirectus\u002Fdirectus.git","https:\u002F\u002Fdirectus.com",447310,36507,"TypeScript",true,4850,null,399,{"key":81,"name":82,"spdx_id":83,"url":78,"node_id":84},"other","Other","NOASSERTION","MDc6TGljZW5zZTA=","all",[87,88,89,90,91,92,6,93,94,95,96,97,98,99,100,101,102,103,104,105],"api","app","cms","composable","data-visualization","database","graphql","headless-cms","javascript","mariadb","mssql","mysql","no-code","node","postgresql","sql","sqlite","typescript","vue","main",{},{"login":6,"id":10,"node_id":11,"avatar_url":12,"gravatar_id":13,"url":14,"html_url":15,"followers_url":16,"following_url":17,"gists_url":18,"starred_url":19,"subscriptions_url":20,"organizations_url":21,"repos_url":22,"events_url":23,"received_events_url":24,"type":25,"user_view_type":26,"site_admin":8},326,{"name":111,"description":112,"verified":8,"id":113,"readme":114,"type":115,"last_updated":116,"host_version":117,"downloads":118,"total_downloads":198,"sandbox":8,"license":199,"publisher":200,"versions":203,"formatted_name":269,"formatted_readme":270,"formatted_description":112,"images":271,"recent_downloads_7_days":132,"recent_downloads_30_days":272},"directus-extension-prometheus","Export Directus metrics into prometheus","d9017186-28b1-441c-9564-738c4f9e9718","# Directus Extension: Prometheus\n\nExpose directus metrics to your prometheus instance.\n\nNo configuration required.\n\n## Install into your project\n\n```bash\nnpm install directus-extension-prometheus\n```\n\nNow, when you launch your directus instance, you will receive\nmetrics on the \u002Fmetrics endpoint.\n\n## Optional Configuration\n\n\n| Option                        | Description                                               | Default      |\n|-------------------------------|-----------------------------------------------------------|--------------|\n| `PROMETHEUS_METRICS_ENDPOINT` | The endpoint on which the prometheus metrics are exposed. | `\"\u002Fmetrics\"` |\n\n## Default Metrics\n\nHere is an example of the types of metrics exposed by this extension:\n\n```\n# HELP directus_request_count The total number of http requests\n# TYPE directus_request_count counter\ndirectus_request_count{status=\"200\",method=\"GET\"} 160\ndirectus_request_count{status=\"200\",method=\"POST\"} 2\ndirectus_request_count{status=\"304\",method=\"GET\"} 12\ndirectus_request_count{status=\"204\",method=\"PATCH\"} 5\n\n# HELP directus_request_duration_seconds The total duration of http requests\n# TYPE directus_request_duration_seconds histogram\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"200\"} 10\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"200\"} 57\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"200\"} 141\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"200\"} 158\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"200\"} 2.239873104999999\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_sum{method=\"POST\",status=\"200\"} 0.08861785999999999\ndirectus_request_duration_seconds_count{method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"304\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"304\"} 6\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"304\"} 11\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"304\"} 0.16695966899999998\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"PATCH\",status=\"204\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"PATCH\",status=\"204\"} 4\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_sum{method=\"PATCH\",status=\"204\"} 0.059318456000000006\ndirectus_request_duration_seconds_count{method=\"PATCH\",status=\"204\"} 5\n\n# HELP directus_collection_size The total number of items in each collection\n# TYPE directus_collection_size gauge\ndirectus_collection_size{collection=\"directus_activity\"} 4\ndirectus_collection_size{collection=\"directus_collections\"} 1\ndirectus_collection_size{collection=\"directus_fields\"} 1\ndirectus_collection_size{collection=\"directus_files\"} 0\ndirectus_collection_size{collection=\"directus_folders\"} 0\ndirectus_collection_size{collection=\"directus_migrations\"} 62\ndirectus_collection_size{collection=\"directus_permissions\"} 0\ndirectus_collection_size{collection=\"directus_presets\"} 0\ndirectus_collection_size{collection=\"directus_relations\"} 0\ndirectus_collection_size{collection=\"directus_revisions\"} 2\ndirectus_collection_size{collection=\"directus_roles\"} 1\ndirectus_collection_size{collection=\"directus_sessions\"} 2\ndirectus_collection_size{collection=\"directus_settings\"} 0\ndirectus_collection_size{collection=\"directus_users\"} 1\ndirectus_collection_size{collection=\"directus_webhooks\"} 0\ndirectus_collection_size{collection=\"directus_dashboards\"} 0\ndirectus_collection_size{collection=\"directus_panels\"} 0\ndirectus_collection_size{collection=\"directus_notifications\"} 0\ndirectus_collection_size{collection=\"directus_shares\"} 0\ndirectus_collection_size{collection=\"directus_flows\"} 0\ndirectus_collection_size{collection=\"directus_operations\"} 0\ndirectus_collection_size{collection=\"thing\"} 0\n```\n\n## Adding Your Own Metrics\n\nTo add your own metrics, you have to [create an extension](https:\u002F\u002Fdocs.directus.io\u002Fextensions\u002Fcreating-extensions.html).\nMost likely you'd want to create a hook extension but `directus-extension-prometheus` should be available from any api extension.\n\nUsage:\n\n```javascript\nconst {globalRegister} = require('directus-extension-prometheus');\nconst {Counter} = require(\"prom-client\");\n\nmodule.exports = {\n    default: ({init}) => {\n        \u002F\u002F here I use the app.before hook to register this metric as soon as the app starts\n        init('app.before', () => {\n            const count = new Counter({\n                registers: [globalRegister],\n                name: 'timey_wimey',\n                help: 'People assume that time is a strict progression from cause to effect, but actually from a non-linear, non-subjective viewpoint, it’s more like a big ball of wibbly-wobbly, timey-wimey stuff.'\n            });\n\n            \u002F\u002F increment the counter every second\n            setInterval(() => {\n                count.inc();\n            }, 1000);\n        });\n    }\n}\n```","hook","2024-02-28T07:28:58.388Z","^9.26.0",[119,122,125,127,130,133,136,139,142,145,147,150,153,156,158,161,164,167,169,172,175,177,180,182,185,188,190,192,194,196],{"date":120,"count":121},"2026-06-17",0,{"date":123,"count":124},"2026-06-18",4,{"date":126,"count":124},"2026-06-19",{"date":128,"count":129},"2026-06-20",1,{"date":131,"count":132},"2026-06-21",8,{"date":134,"count":135},"2026-06-22",5,{"date":137,"count":138},"2026-06-23",6,{"date":140,"count":141},"2026-06-24",80,{"date":143,"count":144},"2026-06-25",25,{"date":146,"count":124},"2026-06-26",{"date":148,"count":149},"2026-06-27",3,{"date":151,"count":152},"2026-06-28",10,{"date":154,"count":155},"2026-06-29",13,{"date":157,"count":124},"2026-06-30",{"date":159,"count":160},"2026-07-01",2,{"date":162,"count":163},"2026-07-02",30,{"date":165,"count":166},"2026-07-03",19,{"date":168,"count":152},"2026-07-04",{"date":170,"count":171},"2026-07-05",54,{"date":173,"count":174},"2026-07-06",23,{"date":176,"count":138},"2026-07-07",{"date":178,"count":179},"2026-07-08",15,{"date":181,"count":121},"2026-07-09",{"date":183,"count":184},"2026-07-10",40,{"date":186,"count":187},"2026-07-11",41,{"date":189,"count":121},"2026-07-12",{"date":191,"count":160},"2026-07-13",{"date":193,"count":121},"2026-07-14",{"date":195,"count":135},"2026-07-15",{"date":197,"count":129},"2026-07-16",12477,"MIT",{"username":201,"verified":8,"id":202,"github_username":78,"github_name":78,"github_blog":78,"github_bio":78,"github_location":78,"github_company":78,"github_avatar_url":78},"chappio","0b1b3462-2165-47db-b812-74dde57114d5",[204,214,221,229,237,245,253,261],{"version":205,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":207,"verified":8,"id":208,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":138,"unpacked_size":210,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":211,"maintainers":212},"1.1.0","^9.22.4","2023-02-11T11:17:47.950Z","1897734e-e720-4e30-88e3-3d21d852811e","https:\u002F\u002Fgithub.com\u002Fchappio\u002Fdirectus-extension-prometheus",12334,[],[213],9216,{"version":215,"package":113,"publisher":202,"type":115,"host_version":117,"publish_date":116,"verified":8,"id":216,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":135,"unpacked_size":217,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":218,"maintainers":219},"1.4.0","190cb59f-ce3f-4574-8c5b-96065c808e26",13078,[],[220],10410,{"version":222,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":223,"verified":8,"id":224,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":138,"unpacked_size":225,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":226,"maintainers":227},"1.1.1","2023-02-11T11:28:12.884Z","35814b57-cb00-42af-8409-6f8149162fdd",42783,[],[228],9217,{"version":230,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":231,"verified":8,"id":232,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":135,"unpacked_size":233,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":234,"maintainers":235},"1.0.0","2023-02-08T20:30:13.591Z","429c38d0-ff46-4247-a518-b1c43d93209f",12127,[],[236],9214,{"version":238,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":239,"verified":8,"id":240,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":138,"unpacked_size":241,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":242,"maintainers":243},"1.2.1","2023-02-22T21:28:09.523Z","562bdfe9-1658-4752-ba32-3f4b65a31707",42837,[],[244],9219,{"version":246,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":247,"verified":8,"id":248,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":149,"unpacked_size":249,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":250,"maintainers":251},"1.0.1","2023-02-08T20:46:52.909Z","8cd9960e-61fa-4a67-a9ce-4fbe53133693",40652,[],[252],9215,{"version":254,"package":113,"publisher":202,"type":115,"host_version":206,"publish_date":255,"verified":8,"id":256,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":138,"unpacked_size":257,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":258,"maintainers":259},"1.2.0","2023-02-22T20:21:37.645Z","aab17b4f-04c6-4ef6-bcc7-116912fff2d6",42825,[],[260],9218,{"version":262,"package":113,"publisher":202,"type":115,"host_version":117,"publish_date":263,"verified":8,"id":264,"url_repository":78,"url_homepage":209,"url_bugs":78,"file_count":135,"unpacked_size":265,"sandbox":8,"sandbox_requested_scopes":78,"license":199,"bundled":266,"maintainers":267},"1.3.0","2023-04-26T14:33:14.073Z","cba98e6e-e64f-481a-919b-9f9f8cd9a6b1",11915,[],[268],9220,"Prometheus","\u003Ch1>Directus Extension: Prometheus\u003C\u002Fh1>\n\u003Cp>Expose directus metrics to your prometheus instance.\u003C\u002Fp>\n\u003Cp>No configuration required.\u003C\u002Fp>\n\u003Ch2>Install into your project\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-bash\">npm install directus-extension-prometheus\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Now, when you launch your directus instance, you will receive\nmetrics on the \u002Fmetrics endpoint.\u003C\u002Fp>\n\u003Ch2>Optional Configuration\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Option\u003C\u002Fth>\n\u003Cth>Description\u003C\u002Fth>\n\u003Cth>Default\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>PROMETHEUS_METRICS_ENDPOINT\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>The endpoint on which the prometheus metrics are exposed.\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>\"\u002Fmetrics\"\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Ch2>Default Metrics\u003C\u002Fh2>\n\u003Cp>Here is an example of the types of metrics exposed by this extension:\u003C\u002Fp>\n\u003Cpre>\u003Ccode># HELP directus_request_count The total number of http requests\n# TYPE directus_request_count counter\ndirectus_request_count{status=\"200\",method=\"GET\"} 160\ndirectus_request_count{status=\"200\",method=\"POST\"} 2\ndirectus_request_count{status=\"304\",method=\"GET\"} 12\ndirectus_request_count{status=\"204\",method=\"PATCH\"} 5\n\n# HELP directus_request_duration_seconds The total duration of http requests\n# TYPE directus_request_duration_seconds histogram\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"200\"} 10\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"200\"} 57\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"200\"} 141\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"200\"} 158\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"200\"} 2.239873104999999\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"200\"} 160\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"POST\",status=\"200\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"POST\",status=\"200\"} 1\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_sum{method=\"POST\",status=\"200\"} 0.08861785999999999\ndirectus_request_duration_seconds_count{method=\"POST\",status=\"200\"} 2\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"GET\",status=\"304\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"GET\",status=\"304\"} 6\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"GET\",status=\"304\"} 11\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_sum{method=\"GET\",status=\"304\"} 0.16695966899999998\ndirectus_request_duration_seconds_count{method=\"GET\",status=\"304\"} 12\ndirectus_request_duration_seconds_bucket{le=\"0.005\",method=\"PATCH\",status=\"204\"} 0\ndirectus_request_duration_seconds_bucket{le=\"0.01\",method=\"PATCH\",status=\"204\"} 4\ndirectus_request_duration_seconds_bucket{le=\"0.025\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.05\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.25\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"0.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"1\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"2.5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"5\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"10\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_bucket{le=\"+Inf\",method=\"PATCH\",status=\"204\"} 5\ndirectus_request_duration_seconds_sum{method=\"PATCH\",status=\"204\"} 0.059318456000000006\ndirectus_request_duration_seconds_count{method=\"PATCH\",status=\"204\"} 5\n\n# HELP directus_collection_size The total number of items in each collection\n# TYPE directus_collection_size gauge\ndirectus_collection_size{collection=\"directus_activity\"} 4\ndirectus_collection_size{collection=\"directus_collections\"} 1\ndirectus_collection_size{collection=\"directus_fields\"} 1\ndirectus_collection_size{collection=\"directus_files\"} 0\ndirectus_collection_size{collection=\"directus_folders\"} 0\ndirectus_collection_size{collection=\"directus_migrations\"} 62\ndirectus_collection_size{collection=\"directus_permissions\"} 0\ndirectus_collection_size{collection=\"directus_presets\"} 0\ndirectus_collection_size{collection=\"directus_relations\"} 0\ndirectus_collection_size{collection=\"directus_revisions\"} 2\ndirectus_collection_size{collection=\"directus_roles\"} 1\ndirectus_collection_size{collection=\"directus_sessions\"} 2\ndirectus_collection_size{collection=\"directus_settings\"} 0\ndirectus_collection_size{collection=\"directus_users\"} 1\ndirectus_collection_size{collection=\"directus_webhooks\"} 0\ndirectus_collection_size{collection=\"directus_dashboards\"} 0\ndirectus_collection_size{collection=\"directus_panels\"} 0\ndirectus_collection_size{collection=\"directus_notifications\"} 0\ndirectus_collection_size{collection=\"directus_shares\"} 0\ndirectus_collection_size{collection=\"directus_flows\"} 0\ndirectus_collection_size{collection=\"directus_operations\"} 0\ndirectus_collection_size{collection=\"thing\"} 0\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Adding Your Own Metrics\u003C\u002Fh2>\n\u003Cp>To add your own metrics, you have to \u003Ca href=\"https:\u002F\u002Fdocs.directus.io\u002Fextensions\u002Fcreating-extensions.html\">create an extension\u003C\u002Fa>.\nMost likely you'd want to create a hook extension but \u003Ccode>directus-extension-prometheus\u003C\u002Fcode> should be available from any api extension.\u003C\u002Fp>\n\u003Cp>Usage:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-javascript\">const {globalRegister} = require('directus-extension-prometheus');\nconst {Counter} = require(\"prom-client\");\n\nmodule.exports = {\n    default: ({init}) =&gt; {\n        \u002F\u002F here I use the app.before hook to register this metric as soon as the app starts\n        init('app.before', () =&gt; {\n            const count = new Counter({\n                registers: [globalRegister],\n                name: 'timey_wimey',\n                help: 'People assume that time is a strict progression from cause to effect, but actually from a non-linear, non-subjective viewpoint, it’s more like a big ball of wibbly-wobbly, timey-wimey stuff.'\n            });\n\n            \u002F\u002F increment the counter every second\n            setInterval(() =&gt; {\n                count.inc();\n            }, 1000);\n        });\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",[],411,[274],{"id":275,"icon":78,"content":276,"link":277,"include_paths":78,"exclude_paths":78},"5cf2f5f6-aecf-4395-8c23-69de326fdf02","Directus V12 is here","https:\u002F\u002Fdirectus.com\u002Fresources\u002Fv12-built-for-the-whole-team"]