{"id":13498165,"url":"https://github.com/graphite-project/whisper","last_synced_at":"2025-05-14T10:10:58.828Z","repository":{"id":3219366,"uuid":"4254334","full_name":"graphite-project/whisper","owner":"graphite-project","description":"Whisper is a file-based time-series database format for Graphite.","archived":false,"fork":false,"pushed_at":"2024-08-25T17:02:48.000Z","size":522,"stargazers_count":1245,"open_issues_count":5,"forks_count":326,"subscribers_count":78,"default_branch":"master","last_synced_at":"2024-10-29T17:35:54.137Z","etag":null,"topics":["graphite","graphite-components","library","metrics","python","time-series","whisper"],"latest_commit_sha":null,"homepage":"http://graphite.readthedocs.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/graphite-project.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":"2012-05-07T21:30:26.000Z","updated_at":"2024-09-24T17:47:54.000Z","dependencies_parsed_at":"2024-04-16T20:58:03.932Z","dependency_job_id":"24fe9ed1-4f87-4bc1-8796-da305f7ab53b","html_url":"https://github.com/graphite-project/whisper","commit_stats":{"total_commits":380,"total_committers":87,"mean_commits":4.367816091954023,"dds":0.8473684210526315,"last_synced_commit":"831089ed94180c3c5b48c52c2a2c1d9c0026b5a2"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphite-project%2Fwhisper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphite-project%2Fwhisper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphite-project%2Fwhisper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphite-project%2Fwhisper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphite-project","download_url":"https://codeload.github.com/graphite-project/whisper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248441932,"owners_count":21104104,"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":["graphite","graphite-components","library","metrics","python","time-series","whisper"],"created_at":"2024-07-31T20:00:52.738Z","updated_at":"2025-04-11T16:39:52.577Z","avatar_url":"https://github.com/graphite-project.png","language":"Python","readme":"# Whisper\n\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/f00d0b65802742e29de56f3744503ab0)](https://www.codacy.com/app/graphite-project/whisper?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=graphite-project/whisper\u0026utm_campaign=badger)\n[![Build Status](https://secure.travis-ci.org/graphite-project/whisper.png)](http://travis-ci.org/graphite-project/whisper)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fwhisper.svg?type=shield)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fgraphite-project%2Fwhisper?ref=badge_shield)\n[![codecov](https://codecov.io/gh/graphite-project/whisper/branch/master/graph/badge.svg)](https://codecov.io/gh/graphite-project/whisper)\n\n## Overview\n\nWhisper is one of three components within the Graphite project:\n\n1. [Graphite-Web](https://github.com/graphite-project/graphite-web), a Django-based web application that renders graphs and dashboards\n2. The [Carbon](https://github.com/graphite-project/carbon) metric processing daemons\n3. The Whisper time-series database library\n\n![Graphite Components](https://github.com/graphite-project/graphite-web/raw/master/webapp/content/img/overview.png \"Graphite Components\")\n\nWhisper is a fixed-size database, similar in design and purpose to RRD (round-robin-database). It provides fast, reliable storage of numeric data over time. Whisper allows for higher resolution (seconds per point) of recent data to degrade into lower resolutions for long-term retention of historical data.\n\n## Installation, Configuration and Usage\n\nPlease refer to the instructions at [readthedocs](http://graphite.readthedocs.org/).\n\n## Whisper Scripts\n\nrrd2whisper.py\n--------------\nConvert a rrd file into a whisper (.wsp) file.\n\n```\nUsage: rrd2whisper.py rrd_path\n\nOptions:\n  -h, --help            show this help message and exit\n  --xFilesFactor=XFILESFACTOR\n                        The xFilesFactor to use in the output file. Defaults\n                        to the input RRD's xFilesFactor\n  --aggregationMethod=AGGREGATIONMETHOD\n                        The consolidation function to fetch from on input and\n                        aggregationMethod to set on output. One of: average,\n                        last, max, min, avg_zero, absmax, absmin\n  --destinationPath=DESTINATIONPATH\n                        Path to place created whisper file. Defaults to the\n                        RRD file's source path.\n\n```\n\nwhisper-create.py\n-----------------\nCreate a new whisper database file.\n\n```\nUsage: whisper-create.py path timePerPoint:timeToStore [timePerPoint:timeToStore]*\n       whisper-create.py --estimate timePerPoint:timeToStore [timePerPoint:timeToStore]*\n\ntimePerPoint and timeToStore specify lengths of time, for example:\n\n60:1440      60 seconds per datapoint, 1440 datapoints = 1 day of retention\n15m:8        15 minutes per datapoint, 8 datapoints = 2 hours of retention\n1h:7d        1 hour per datapoint, 7 days of retention\n12h:2y       12 hours per datapoint, 2 years of retention\n\n\nOptions:\n  -h, --help            show this help message and exit\n  --xFilesFactor=XFILESFACTOR\n  --aggregationMethod=AGGREGATIONMETHOD\n                        Function to use when aggregating values (average, sum,\n                        last, max, min, avg_zero, absmax, absmin)\n  --overwrite\n  --estimate            Don't create a whisper file, estimate storage requirements based on archive definitions\n```\n\nwhisper-dump.py\n---------------\nDump the whole whisper file content to stdout.\n\n```\nUsage: whisper-dump.py path\n\nOptions:\n  -h, --help            show this help message and exit\n  --pretty              Show human-readable timestamps instead of unix times\n  -t TIME_FORMAT, --time-format=TIME_FORMAT\n                        Time format to use with --pretty; see time.strftime()\n  -r, --raw             Dump value only in the same format for whisper-update\n                        (UTC timestamps)\n```\n\nwhisper-fetch.py\n----------------\nFetch all the metrics stored in a whisper file to stdout.\n\n```\nUsage: whisper-fetch.py [options] path\n\nOptions:\n  -h, --help     show this help message and exit\n  --from=_FROM   Unix epoch time of the beginning of your requested interval\n                 (default: 24 hours ago)\n  --until=UNTIL  Unix epoch time of the end of your requested interval\n                 (default: now)\n  --json         Output results in JSON form\n  --pretty       Show human-readable timestamps instead of unix times\n  -t TIME_FORMAT, --time-format=TIME_FORMAT\n                 Time format to use with --pretty; see time.strftime()\n  --drop=DROP    Specify 'nulls' to drop all null values. Specify 'zeroes' to\n                 drop all zero values. Specify 'empty' to drop both null and\n                 zero values.\n```\n\nwhisper-info.py\n---------------\nDump the metadata about a whisper file to stdout.\n\n```\nUsage: whisper-info.py [options] path [field]\n\nOptions:\n  -h, --help  show this help message and exit\n  --json      Output results in JSON form\n```\n\nwhisper-merge.py\n----------------\nJoin two existing whisper files together.\n\n```\nUsage: whisper-merge.py [options] from_path to_path\n\nOptions:\n  -h, --help  show this help message and exit\n```\n\nwhisper-fill.py\n----------------\nCopies data from src in dst, if missing.\nUnlike whisper-merge, don't overwrite data that's\nalready present in the target file, but instead, only add the missing\ndata (e.g. where the gaps in the target file are).  Because no values\nare overwritten, no data or precision gets lost.  Also, unlike\nwhisper-merge, try to take the highest-precision archive to provide\nthe data, instead of the one with the largest retention.\n\n```\nUsage: whisper-fill.py [options] src_path dst_path\n\nOptions:\n  -h, --help  show this help message and exit\n```\n\nwhisper-resize.py\n-----------------\nChange the retention rates of an existing whisper file.\n\n```\nUsage: whisper-resize.py path timePerPoint:timeToStore [timePerPoint:timeToStore]*\n\ntimePerPoint and timeToStore specify lengths of time, for example:\n\n60:1440      60 seconds per datapoint, 1440 datapoints = 1 day of retention\n15m:8        15 minutes per datapoint, 8 datapoints = 2 hours of retention\n1h:7d        1 hour per datapoint, 7 days of retention\n12h:2y       12 hours per datapoint, 2 years of retention\n\n\nOptions:\n  -h, --help            show this help message and exit\n  --xFilesFactor=XFILESFACTOR\n                        Change the xFilesFactor\n  --aggregationMethod=AGGREGATIONMETHOD\n                        Change the aggregation function (average, sum, last,\n                        max, min, avg_zero, absmax, absmin)\n  --force               Perform a destructive change\n  --newfile=NEWFILE     Create a new database file without removing the\n                        existing one\n  --nobackup            Delete the .bak file after successful execution\n  --aggregate           Try to aggregate the values to fit the new archive\n                        better. Note that this will make things slower and use\n                        more memory.\n```\n\nwhisper-set-aggregation-method.py\n---------------------------------\nChange the aggregation method of an existing whisper file.\n\n```\nUsage: whisper-set-aggregation-method.py path \u003caverage|sum|last|max|min|avg_zero|absmax|absmin\u003e\n\nOptions:\n  -h, --help  show this help message and exit\n```\n\nwhisper-update.py\n-----------------\nUpdate a whisper file with 1 or many values, must provide a time stamp with the value.\n\n```\nUsage: whisper-update.py [options] path timestamp:value [timestamp:value]*\n\nOptions:\n  -h, --help  show this help message and exit\n```\n\nwhisper-diff.py\n---------------\nCheck the differences between whisper files.  Use sanity check before merging.\n\n```\nUsage: whisper-diff.py [options] path_a path_b\n\nOptions:\n  -h, --help      show this help message and exit\n  --summary       show summary of differences\n  --ignore-empty  skip comparison if either value is undefined\n  --columns       print output in simple columns\n  --no-headers    do not print column headers\n  --until=UNTIL   Unix epoch time of the end of your requested interval\n                  (default: now)\n  --json          Output results in JSON form\n```\n\n## License\n\nWhisper is licensed under version 2.0 of the Apache License. See the [LICENSE](https://github.com/graphite-project/carbon/blob/master/LICENSE) file for details.\n","funding_links":[],"categories":["Python","Examples or singular models","Nagios Monitoring"],"sub_categories":["Nagios Monitoring Addons"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphite-project%2Fwhisper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphite-project%2Fwhisper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphite-project%2Fwhisper/lists"}