{"action":"created","issue":{"url":"https://api.github.com/repos/DanCech/carbon/issues/1","repository_url":"https://api.github.com/repos/DanCech/carbon","labels_url":"https://api.github.com/repos/DanCech/carbon/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/DanCech/carbon/issues/1/comments","events_url":"https://api.github.com/repos/DanCech/carbon/issues/1/events","html_url":"https://github.com/DanCech/carbon/pull/1","id":242709685,"number":1,"title":"[WIP] tagging","user":{"login":"DanCech","id":1443603,"avatar_url":"https://avatars0.githubusercontent.com/u/1443603?v=4","gravatar_id":"","url":"https://api.github.com/users/DanCech","html_url":"https://github.com/DanCech","followers_url":"https://api.github.com/users/DanCech/followers","following_url":"https://api.github.com/users/DanCech/following{/other_user}","gists_url":"https://api.github.com/users/DanCech/gists{/gist_id}","starred_url":"https://api.github.com/users/DanCech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DanCech/subscriptions","organizations_url":"https://api.github.com/users/DanCech/orgs","repos_url":"https://api.github.com/users/DanCech/repos","events_url":"https://api.github.com/users/DanCech/events{/privacy}","received_events_url":"https://api.github.com/users/DanCech/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2017-07-13T13:55:52Z","updated_at":"2017-07-19T14:20:31Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/DanCech/carbon/pulls/1","html_url":"https://github.com/DanCech/carbon/pull/1","diff_url":"https://github.com/DanCech/carbon/pull/1.diff","patch_url":"https://github.com/DanCech/carbon/pull/1.patch"},"body":"This is a very basic first cut of tagging support in carbon, designed to be used in conjunction with https://github.com/DanCech/graphite-web/pull/1\r\n\r\nIt defines a format for tagged series in carbon, which is `<metric>;<tag1>=<value1>;<tag2>=<value2>`\r\n\r\nThis format was chosen to remain compatible with existing carbon-based tooling as much as possible, while maintaining a clear format for defining tags and avoiding any issues with tag names or values containing `.`, which is an issue for implementations that embed tag/value pairs as nodes within the dotted series name.\r\n\r\nThe major changes to the carbon pipeline are:\r\n\r\n- use of TaggedSeries class (shared with graphite-web, could maybe be put into a separate library) to canonicalize tagged series names by ordering tags alphabetically by tag name immediately before putting the points into the write cache\r\n- make HTTP POST to the new `/tags/tagSeries` endpoint in graphite-we` to add series to the tag database, this currently happens on every create operation and on ~1% (this will likely need to be made configurable) of update operations\r\n\r\nThe biggest architecture change is that carbon now needs to be aware of the location of graphite-web (hence the new `GRAPHITE_URL` configuration item) so that it can make the HTTP calls to add series to the tag database.\r\n\r\nThe biggest issue with the current implementation in carbon is that the name used to store the series in the underlying database is still the metric name, which means that if we follow the convention of breaking the series name up by `.` and creating a subdirectory for each segment, meaning that many database files will end up in the same directory and potentially cause performance issues (depending on the filesystem in use). One potential solution to this problem would be to stored \"tagged\" series in a separate filesystem hierarchy using a directory structure based on a prefix of a hash of the full tagged series name."},"comment":{"url":"https://api.github.com/repos/DanCech/carbon/issues/comments/316402880","html_url":"https://github.com/DanCech/carbon/pull/1#issuecomment-316402880","issue_url":"https://api.github.com/repos/DanCech/carbon/issues/1","id":316402880,"user":{"login":"DanCech","id":1443603,"avatar_url":"https://avatars0.githubusercontent.com/u/1443603?v=4","gravatar_id":"","url":"https://api.github.com/users/DanCech","html_url":"https://github.com/DanCech","followers_url":"https://api.github.com/users/DanCech/followers","following_url":"https://api.github.com/users/DanCech/following{/other_user}","gists_url":"https://api.github.com/users/DanCech/gists{/gist_id}","starred_url":"https://api.github.com/users/DanCech/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DanCech/subscriptions","organizations_url":"https://api.github.com/users/DanCech/orgs","repos_url":"https://api.github.com/users/DanCech/repos","events_url":"https://api.github.com/users/DanCech/events{/privacy}","received_events_url":"https://api.github.com/users/DanCech/received_events","type":"User","site_admin":false},"created_at":"2017-07-19T14:20:31Z","updated_at":"2017-07-19T14:20:31Z","body":"So the way that tags work in this scenario is that a given series/node is uniquely identified by a set of tags (after normalizing the order they occur in), and thus needs a separate whisper file on disk.  Tags are not intended to be used to store information about a given logical series that might change over time."}}
{"actor":{"display_login":"DanCech"}}