{"id":18414894,"url":"https://github.com/xerial/presto-metrics","last_synced_at":"2025-04-07T11:33:01.544Z","repository":{"id":20039720,"uuid":"23307906","full_name":"xerial/presto-metrics","owner":"xerial","description":"Presto metric collection library for Ruby","archived":false,"fork":false,"pushed_at":"2022-11-17T01:15:43.000Z","size":67,"stargazers_count":26,"open_issues_count":3,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-02T04:56:54.493Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","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/xerial.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-25T09:00:47.000Z","updated_at":"2022-12-09T02:21:08.000Z","dependencies_parsed_at":"2023-01-13T20:44:33.192Z","dependency_job_id":null,"html_url":"https://github.com/xerial/presto-metrics","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xerial%2Fpresto-metrics","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xerial%2Fpresto-metrics/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xerial%2Fpresto-metrics/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xerial%2Fpresto-metrics/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xerial","download_url":"https://codeload.github.com/xerial/presto-metrics/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247645216,"owners_count":20972428,"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":[],"created_at":"2024-11-06T03:52:37.382Z","updated_at":"2025-04-07T11:33:00.131Z","avatar_url":"https://github.com/xerial.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Presto::Metrics\n\nPresto is a distributed SQL engine, which launches coordinator and worker servers to process distributed queries in a cluster. We need to monitor the states of these coordinators/workers. Presto::Metrics is a library for accessing these states from Ruby.\n\nPresto provides REST API for accessing JMX properties. Presto::Metrics accesses this REST API to extract JMX property values.\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'presto-metrics'\n```\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install presto-metrics\n\n## Usage\n\n```ruby\n\nrequire 'presto/metrics'\n\nclient = Presto::Metrics::Client.new  # Access to http://localhost:8080 in default\n\n# Alternatively, you can specify the host name and port number to use\nclient = Presto::Metrics::Client.new(:host =\u003e \"localhost\", :port=\u003e8080) \n\n\nclient.os_metrics\n# =\u003e {:open_file_descriptor_count=\u003e360, :max_file_descriptor_count=\u003e10240, :committed_virtual_memory_size=\u003e18683629568, :total_swap_space_size=\u003e2147483648, :free_swap_space_size=\u003e1132986368, :process_cpu_time=\u003e240244441000, :free_physical_memory_size=\u003e2088931328, :total_physical_memory_size=\u003e17179869184, :system_cpu_load=\u003e0.044989775051124746, :process_cpu_load=\u003e0.002293214043176635, :name=\u003e\"Mac OS X\", :version=\u003e\"10.9.4\", :available_processors=\u003e8, :arch=\u003e\"x86_64\", :system_load_average=\u003e2.0537109375, :object_name=\u003e\"java.lang:type=OperatingSystem\"}\n\n# This is equivalent to write as follows\nclient.get_metrics(\"java.lang:type=OperatingSystem\")\n\n# Retrieve a specific set of parameters\nclient.query_manager_metrics([\"executor.active_count\", \"executor.completed_task_count\"])\n# =\u003e {:\"executor.active_count\"=\u003e0, :\"executor.completed_task_count\"=\u003e0}\n\nclient.os_metrics([:system_load_average, :free_physical_memory_size])\n#=\u003e {:free_physical_memory_size=\u003e3690512384, :system_load_average=\u003e2.33056640625}\n\n\n# Path queries\nclient.path(\"os:physical_memory_size\")\n# =\u003e {\"free_physical_memory_size\"=\u003e55034294272}\n\n# You can use comma-separated list of path queries\nclient.path(\"memory:heap_memory_usage/used,non_heap_memory_usage/used\")\n# =\u003e {\"heap_memory_usage/used\"=\u003e926714864, \"non_heap_memory_usage/used\"=\u003e108948488}\n\n\n# Retrieve standard metrics\nclient.memory_usage_metrics      # java.lang:Type=Memory\nclient.os_metrics                # java.lang:type=OperatingSystm\nclient.gc_cms_metrics            # java.lang:type=GarbageCollector,name=ConcurrentMarkSweep\nclient.gc_parnew_metrics         # java.lang:type=GarbageCollector,name=ParNew\nclient.gc_g1_metrics             # java.lang:type=GarbageCollector,name=G1 Young Generation and G1 Old Genration\nclient.query_manager_metrics     # presto.execution:name=QueryManager\nclient.query_execution_metrics   # presto.execution:name=QueryExecution\nclient.node_scheduler_metrics    # presto.execution:name=NodeScheduler\nclient.task_executor_metrics     # presto.execution:name=TaskExecutor\nclient.task_manager_metrics      # presto.execution:name=TaskManager\nclient.cluster_memory_manager_metrics # presto.memory:name=ClusterMemoryManager\n\n# Memory resource manager metrics (since Presto 0.103)\nclient.memory_pool_metrics\n=\u003e {\"general\"=\u003e{\"free_bytes\"=\u003e59700045415, \"max_bytes\"=\u003e59700045415}, \"reserved\"=\u003e{\"free_bytes\"=\u003e2147483648, \"max_bytes\"=\u003e2147483648}}\n\nclient.cluster_memory_pool_metrics\n=\u003e {\"general\"=\u003e{\"blocked_nodes\"=\u003e0, \"free_distributed_bytes\"=\u003e116833832981, \"nodes\"=\u003e4, \"queries\"=\u003e8, \"total_distributed_bytes\"=\u003e131855495989},\n    \"reserved\"=\u003e{\"blocked_nodes\"=\u003e0, \"free_distributed_bytes\"=\u003e15032385536, \"nodes\"=\u003e4, \"queries\"=\u003e0, \"total_distributed_bytes\"=\u003e15032385536}}\n\n\n# Retrieve presto worker metrics\npp client.node_metrics\n[{\"host\"=\u003e\"xxx.xxx.xxx.xxx\",\n  \"uri\"=\u003e\"http://xxx.xxx.xxx.xxx:8080\",\n  \"recent_requests\"=\u003e120.00277776491774,\n  \"recent_failures\"=\u003e0.0,\n  \"recent_successes\"=\u003e120.0027781973587,\n  \"last_request_time\"=\u003e\"2015-03-19T03:27:23.242Z\",\n  \"last_response_time\"=\u003e\"2015-03-19T03:27:23.243Z\",\n  \"recent_failure_ratio\"=\u003e0.0,\n  \"age\"=\u003e\"38.56m\",\n  \"recent_failures_by_type\"=\u003e{}},\n {\"host\"=\u003e\"yyy.yyy.yyy.yyy\",\n  \"uri\"=\u003e\"http://yyy.yyy.yyy.yyy:8080\",\n  \"recent_requests\"=\u003e120.00277776491774,\n  \"recent_failures\"=\u003e0.0,\n  \"recent_successes\"=\u003e120.0027777649236,\n  \"last_request_time\"=\u003e\"2015-03-19T03:27:23.242Z\",\n  \"last_response_time\"=\u003e\"2015-03-19T03:27:23.243Z\",\n  \"recent_failure_ratio\"=\u003e0.0,\n  \"age\"=\u003e\"38.56m\",\n  \"recent_failures_by_type\"=\u003e{}}]\n\n# Garbage Collection metrics\npp client.gc_g1_metrics\n{\"g1_old_generation\"=\u003e\n  {\"last_gc_info\"=\u003e\n    {\"gc_thread_count\"=\u003e28,\n     \"duration\"=\u003e478,\n     \"end_time\"=\u003e9530,\n     \"id\"=\u003e3,\n     \"memory_usage_after_gc\"=\u003e\n      {\"g1_survivor_space\"=\u003e{\"committed\"=\u003e0, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e0},\n       \"metaspace\"=\u003e\n        {\"committed\"=\u003e60444672, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e56490104},\n       \"g1_old_gen\"=\u003e\n        {\"committed\"=\u003e134217728,\n         \"init\"=\u003e1895825408,\n         \"max\"=\u003e103079215104,\n         \"used\"=\u003e75768752},\n       \"g1_eden_space\"=\u003e\n        {\"committed\"=\u003e134217728, \"init\"=\u003e117440512, \"max\"=\u003e-1, \"used\"=\u003e0},\n       \"code_cache\"=\u003e\n        {\"committed\"=\u003e28114944,\n         \"init\"=\u003e2555904,\n         \"max\"=\u003e314572800,\n         \"used\"=\u003e27676416}},\n     \"memory_usage_before_gc\"=\u003e\n      {\"g1_survivor_space\"=\u003e\n        {\"committed\"=\u003e33554432, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e33554432},\n       \"metaspace\"=\u003e\n        {\"committed\"=\u003e60444672, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e56829560},\n       \"g1_old_gen\"=\u003e\n        {\"committed\"=\u003e234881024,\n         \"init\"=\u003e1895825408,\n         \"max\"=\u003e103079215104,\n         \"used\"=\u003e10082520},\n       \"g1_eden_space\"=\u003e\n        {\"committed\"=\u003e402653184,\n         \"init\"=\u003e117440512,\n         \"max\"=\u003e-1,\n         \"used\"=\u003e318767104},\n       \"code_cache\"=\u003e\n        {\"committed\"=\u003e28114944,\n         \"init\"=\u003e2555904,\n         \"max\"=\u003e314572800,\n         \"used\"=\u003e27676416}},\n     \"start_time\"=\u003e9052},\n   \"collection_count\"=\u003e3,\n   \"collection_time\"=\u003e1624,\n   \"memory_pool_names\"=\u003e[\"G1 Eden Space\", \"G1 Survivor Space\", \"G1 Old Gen\"],\n   \"valid\"=\u003etrue,\n   \"name\"=\u003e\"G1 Old Generation\",\n   \"object_name\"=\u003e\"java.lang:type=GarbageCollector,name=G1 Old Generation\"},\n \"g1_young_generation\"=\u003e\n  {\"last_gc_info\"=\u003e\n    {\"gc_thread_count\"=\u003e28,\n     \"duration\"=\u003e26,\n     \"end_time\"=\u003e7034504,\n     \"id\"=\u003e145,\n     \"memory_usage_after_gc\"=\u003e\n      {\"g1_survivor_space\"=\u003e\n        {\"committed\"=\u003e100663296, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e100663296},\n       \"metaspace\"=\u003e\n        {\"committed\"=\u003e73138176, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e67016896},\n       \"g1_old_gen\"=\u003e\n        {\"committed\"=\u003e5989466112,\n         \"init\"=\u003e1895825408,\n         \"max\"=\u003e103079215104,\n         \"used\"=\u003e3212283664},\n       \"g1_eden_space\"=\u003e\n        {\"committed\"=\u003e9512681472, \"init\"=\u003e117440512, \"max\"=\u003e-1, \"used\"=\u003e0},\n       \"code_cache\"=\u003e\n        {\"committed\"=\u003e63045632,\n         \"init\"=\u003e2555904,\n         \"max\"=\u003e314572800,\n         \"used\"=\u003e62560832}},\n     \"memory_usage_before_gc\"=\u003e\n      {\"g1_survivor_space\"=\u003e\n        {\"committed\"=\u003e83886080, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e83886080},\n       \"metaspace\"=\u003e\n        {\"committed\"=\u003e73138176, \"init\"=\u003e0, \"max\"=\u003e-1, \"used\"=\u003e67016896},\n       \"g1_old_gen\"=\u003e\n        {\"committed\"=\u003e5771362304,\n         \"init\"=\u003e1895825408,\n         \"max\"=\u003e103079215104,\n         \"used\"=\u003e3206420472},\n       \"g1_eden_space\"=\u003e\n        {\"committed\"=\u003e9747562496,\n         \"init\"=\u003e117440512,\n         \"max\"=\u003e-1,\n         \"used\"=\u003e9277800448},\n       \"code_cache\"=\u003e\n        {\"committed\"=\u003e63045632,\n         \"init\"=\u003e2555904,\n         \"max\"=\u003e314572800,\n         \"used\"=\u003e62560832}},\n     \"start_time\"=\u003e7034478},\n   \"collection_count\"=\u003e145,\n   \"collection_time\"=\u003e8946,\n   \"memory_pool_names\"=\u003e[\"G1 Eden Space\", \"G1 Survivor Space\"],\n   \"valid\"=\u003etrue,\n   \"name\"=\u003e\"G1 Young Generation\",\n   \"object_name\"=\u003e\"java.lang:type=GarbageCollector,name=G1 Young Generation\"}}\n\n# Retrieve the JSON representation of JMX properties\nclient.get_mbean_json(\"java.lang:Type=Memory\")\n\n# Pretty print \nrequire 'pp'\npp c.memory_usage_metrics\n#{\n#  \"verbose\": false,\n#  \"object_pending_finalization_count\": 0,\n#  \"heap_memory_usage\": {\n#    \"committed\": 259522560,\n#    \"init\": 268435456,\n#    \"max\": 14962655232,\n#    \"used\": 84478072\n#  },\n#  \"non_heap_memory_usage\": {\n#    \"committed\": 163250176,\n#    \"init\": 159842304,\n#    \"max\": 471859200,\n#    \"used\": 53369528\n3  },\n#  \"object_name\": \"java.lang:type=Memory\"\n#}\n\n```\n\n## Contributing\n\n1. Fork it ( https://github.com/xerial/presto-metrics/fork )\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n\n\n## For developers\n\nTo develop presto-metrics\n\n```\n$ bundle exec irb -I lib -r presto/metrics.rb\n\nirb\u003e client = Presto::Metrics::Client.new(:host =\u003e \"ec2-54-205-192-36.compute-1.amazonaws.com\", :port=\u003e8080)\n\n# reload modified code\nirb\u003e load \"presto/metrics/client.rb\"\n\n```\n\n\n### Releasing a new version\n```\n# Update version in lib/presto/metrics/version.rb\n# Publish to RubyGem\n$ bundle exec rake release\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxerial%2Fpresto-metrics","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxerial%2Fpresto-metrics","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxerial%2Fpresto-metrics/lists"}