)]}'
{"specs/juno/arithmetic-transformer.rst":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"more values of the same meter. Some calculations need to take into account"},{"line_number":23,"context_line":"multiple meters, like in the case of memory utilization, where::"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    memory_util \u003d memory.usage / memory"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed change"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_feba126d","line":25,"updated":"2014-07-09 10:16:43.000000000","message":"Do we need to call out some restrictions on this? e.g.\n\n* 1. only valid for samples relating to the same resource?\n* 2. only valid for samples from sources with the same interval?\n* 3. only valid for samples for meters match the same source? (a simple way of guaranteeing #2)","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":22,"context_line":"more values of the same meter. Some calculations need to take into account"},{"line_number":23,"context_line":"multiple meters, like in the case of memory utilization, where::"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    memory_util \u003d memory.usage / memory"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Proposed change"},{"line_number":28,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_11409734","line":25,"in_reply_to":"baada198_feba126d","updated":"2014-07-09 11:13:33.000000000","message":"* 1. Yes, definitely,\n* 2. not necessarily, if we go with the time interval approach, it does not matter,\n* 3. same as 2 IMO.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"**Parsing the meter names**"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Since, meter names are not Python-compatible, we must escape them. The"},{"line_number":57,"context_line":"expression string is only parsed at the time the pipeline is initialized,"},{"line_number":58,"context_line":"so it does not cause any performance overhead."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_fe5e9275","line":56,"updated":"2014-07-09 10:16:43.000000000","message":"Just to clarify:\n\n s/not Python-compatible/not necessarily valid Python identifiers/\n\nthat\u0027s the incompatibility, correct?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"**Parsing the meter names**"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"Since, meter names are not Python-compatible, we must escape them. The"},{"line_number":57,"context_line":"expression string is only parsed at the time the pipeline is initialized,"},{"line_number":58,"context_line":"so it does not cause any performance overhead."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_514a0f56","line":56,"in_reply_to":"baada198_fe5e9275","updated":"2014-07-09 11:13:33.000000000","message":"Agree, will fix the wording.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Namespace({"},{"line_number":86,"context_line":"        \"_memory_usage_ESCAPED\": { ... memory.usage sample dict ... }"},{"line_number":87,"context_line":"        \"memory\": { ... memory sample dict ... }"},{"line_number":88,"context_line":"    })"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"**Gathering the values**"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_1eda66e9","line":87,"updated":"2014-07-09 10:16:43.000000000","message":"Presumably this namespace would have be fleshed out for *all* meters that are target\u0027d by the arithmetic transformer?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    Namespace({"},{"line_number":86,"context_line":"        \"_memory_usage_ESCAPED\": { ... memory.usage sample dict ... }"},{"line_number":87,"context_line":"        \"memory\": { ... memory sample dict ... }"},{"line_number":88,"context_line":"    })"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"**Gathering the values**"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_718c7380","line":87,"in_reply_to":"baada198_1eda66e9","updated":"2014-07-09 11:13:33.000000000","message":"Well, if I understand your question, the namespace will contain all the meters required by the transformer, yes. So it will be one level deeper than in the ScalingTransformer usecase.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"* *pro*: no need for specifying time intervals and expiring old samples"},{"line_number":101,"context_line":"* *con*: arithmetic operation limited only to samples that originate"},{"line_number":102,"context_line":"    from the same pollster"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_9eed9691","line":102,"updated":"2014-07-09 10:16:43.000000000","message":"So as a general rule, we only emit one meter type per pollster, right?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"* *pro*: no need for specifying time intervals and expiring old samples"},{"line_number":101,"context_line":"* *con*: arithmetic operation limited only to samples that originate"},{"line_number":102,"context_line":"    from the same pollster"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_31911b53","line":102,"in_reply_to":"baada198_9eed9691","updated":"2014-07-09 11:13:33.000000000","message":"My mistake, it should say \"from the same polling task\".","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":101,"context_line":"* *con*: arithmetic operation limited only to samples that originate"},{"line_number":102,"context_line":"    from the same pollster"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"},{"line_number":106,"context_line":"we clear the cache. Samples in the cache are expired after a"},{"line_number":107,"context_line":"set amount of time."}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_fea3f24c","line":104,"updated":"2014-07-09 10:16:43.000000000","message":"Need to make the point explicitly that the cache is keyed by resource ID?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":101,"context_line":"* *con*: arithmetic operation limited only to samples that originate"},{"line_number":102,"context_line":"    from the same pollster"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"},{"line_number":106,"context_line":"we clear the cache. Samples in the cache are expired after a"},{"line_number":107,"context_line":"set amount of time."}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_f15ec375","line":104,"in_reply_to":"baada198_fea3f24c","updated":"2014-07-09 11:13:33.000000000","message":"Will do.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c2a9f28a50d3aefc4bb9d7fec703467f427d0e61","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"},{"line_number":106,"context_line":"we clear the cache. Samples in the cache are expired after a"},{"line_number":107,"context_line":"set amount of time."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* *pro*: meters used not limited to the same pollster"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_f11083aa","line":106,"updated":"2014-07-09 10:56:01.000000000","message":"Can you be a bit more explicit about the methods and the whys here? For example how do we know when we have the necessary samples? And why are the samples expired after a set amount of time? Would it make any sense to let the samples live in the cache until they are forced out in a LRU way by incoming data?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":105,"context_line":"as soon as we have the necessary samples. After the transformation"},{"line_number":106,"context_line":"we clear the cache. Samples in the cache are expired after a"},{"line_number":107,"context_line":"set amount of time."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* *pro*: meters used not limited to the same pollster"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_9473b5b3","line":106,"in_reply_to":"baada198_f11083aa","updated":"2014-07-09 11:13:33.000000000","message":"* Necessary samples: samples of all the meters that are used in the expression\n* Expiring: we need a way to tell if the samples in the cache are \u0027related\u0027, e.g. can be used to perform the calculation. For example, we have a \u0027memory\u0027 sample from yesterday and a \u0027memory.usage\u0027 sample from today. The samples are probably not good for a calculation, since the memory amount might have changed from yesterday.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"we clear the cache. Samples in the cache are expired after a"},{"line_number":107,"context_line":"set amount of time."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* *pro*: meters used not limited to the same pollster"},{"line_number":110,"context_line":"* *con*: need to specify time interval"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_9e94b6e9","line":109,"updated":"2014-07-09 10:16:43.000000000","message":"IINM, I think this would be needed.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"set amount of time."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* *pro*: meters used not limited to the same pollster"},{"line_number":110,"context_line":"* *con*: need to specify time interval"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Alternatives"},{"line_number":113,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_1e88a6c5","line":110,"updated":"2014-07-09 10:16:43.000000000","message":"So the time interval is the expiry on the cache, or the time window during which sample from memory.total and memory.used can be considered related?\n\n(or does that amount to the same thing)?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":107,"context_line":"set amount of time."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* *pro*: meters used not limited to the same pollster"},{"line_number":110,"context_line":"* *con*: need to specify time interval"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"Alternatives"},{"line_number":113,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_54611dd2","line":110,"in_reply_to":"baada198_1e88a6c5","updated":"2014-07-09 11:13:33.000000000","message":"The same thing. If a sample in the cache is too old, we remove it. Your wording is more user-friendly though :-)","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f57920fc96b8c745975126b8cfdaf845e963594d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"  it has all the required samples"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  Our approach is simpler, since other transformers already use caching so it"},{"line_number":134,"context_line":"  wouldn\u0027t make sense to push this functionality to the pipeline."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"Data model impact"},{"line_number":137,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_1e018639","line":134,"updated":"2014-07-09 10:16:43.000000000","message":"Agreed.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c2a9f28a50d3aefc4bb9d7fec703467f427d0e61","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Performance/Scalability Impacts"},{"line_number":163,"context_line":"-------------------------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"None. Expression parsing is performed only at pipeline initialization."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_915f4775","line":165,"updated":"2014-07-09 10:56:01.000000000","message":"Are there any concerns about the impact this change would have on the size of caches?","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7f21afedebec358a949ac5896fe2f67ba45fcc87","unresolved":false,"context_lines":[{"line_number":162,"context_line":"Performance/Scalability Impacts"},{"line_number":163,"context_line":"-------------------------------"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"None. Expression parsing is performed only at pipeline initialization."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"Other deployer impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"baada198_d47b6d79","line":165,"in_reply_to":"baada198_915f4775","updated":"2014-07-09 11:13:33.000000000","message":"I don\u0027t think so. Other transformers already cache values between intervals. This isn\u0027t any different, except it is for more than one meter.","commit_id":"1ace7892402040eb0d3729ff4eb7806f72f77286"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7fe0ff371f428d709de21fbfb901eafbfb0d51b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          name: \"memory_util\""},{"line_number":41,"context_line":"          unit: \"%\""},{"line_number":42,"context_line":"          type: \"gauge\""},{"line_number":43,"context_line":"          expr: \"$(memory.usage) / $(memory)\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To demonstrate the use of metadata, here is the implementation of"},{"line_number":46,"context_line":"a silly metric that shows average CPU time per core::"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_a6a22898","line":43,"updated":"2014-07-10 09:38:43.000000000","message":"Wouldn\u0027t apply in this example, as memory\u003e0 ... but I wonder do you need to explicitly call out tolerance for NaN scenarios resulting from the expr eval, such as division by zero?","commit_id":"c26c4fbbbd9cd7eeeda4903ff69db0ca5f5b6166"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7fe0ff371f428d709de21fbfb901eafbfb0d51b","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"* *pro*: no need for specifying TTL for cached samples"},{"line_number":103,"context_line":"* *con*: arithmetic operation limited only to samples that originate"},{"line_number":104,"context_line":"    from the same polling task"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"2. We cache the samples same as above, but do the transformation"},{"line_number":107,"context_line":"as soon as we have the necessary samples (samples that are used in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_41ca161b","line":104,"updated":"2014-07-10 09:38:43.000000000","message":"So in a sense this effectively provides the guarantee that the same or a compatible source is being used for each of the convenient meters?\n\ni.e. same polling task \u003d\u003e same interval\n\nI\u0027m beginning to like that simplicity.\n\nThe very slight downside is ordering, i.e. all the primary and derived-from-single-meter samples will be published first on each pass, then the arithmetically-derived samples. But I think that\u0027s OK.\n\nThere may be a slight edge case with multiple samples for same primary meter appearing in the same polling task run (e.g. if the meter matched multiple interval-compatible sources).","commit_id":"c26c4fbbbd9cd7eeeda4903ff69db0ca5f5b6166"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7fe0ff371f428d709de21fbfb901eafbfb0d51b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"* *con*: need to specify maximum age for samples to be used in calculation"},{"line_number":117,"context_line":"* *con*: might produce samples with irregular cadence, as in the case of"},{"line_number":118,"context_line":"    the calculation involving meter A with 60s cadence and meter B with 45s"},{"line_number":119,"context_line":"    cadence"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"3. Similar as #2, but limit only to meters from sources with the same interval."},{"line_number":122,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_2137e2b1","line":119,"updated":"2014-07-10 09:38:43.000000000","message":"That point about the irregular cadence would seem to be to a dealbreaker for approach #2.","commit_id":"c26c4fbbbd9cd7eeeda4903ff69db0ca5f5b6166"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"f61880649ad8191e1d74225be8907f55cdadcd1f","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"* *pro*: produced samples can\u0027t have irregular cadence"},{"line_number":124,"context_line":"* *pro*: since all meters involved have the same interval, we can have a"},{"line_number":125,"context_line":"    TTL for samples, no need for user configuration"},{"line_number":126,"context_line":"* *con*: how to technically enforce this restriction?"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"4. Same as #2, but provide a configuration option to not clear the cache"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_9bb3bde8","line":125,"updated":"2014-07-10 08:27:18.000000000","message":"It should say a \"static TTL\" here. If we know that all the samples arrive at approximately the same time (because they are on the same interval and therefore in the same polling task), we only have a short period of time in which the samples are valid (say, 5 seconds). The next question is how to set this? With a 600s cadence, 5 seconds is OK, but with 10s cadence it probably isn\u0027t.","commit_id":"c26c4fbbbd9cd7eeeda4903ff69db0ca5f5b6166"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a7fe0ff371f428d709de21fbfb901eafbfb0d51b","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"* *pro*: produced samples can\u0027t have irregular cadence"},{"line_number":124,"context_line":"* *pro*: since all meters involved have the same interval, we can have a"},{"line_number":125,"context_line":"    TTL for samples, no need for user configuration"},{"line_number":126,"context_line":"* *con*: how to technically enforce this restriction?"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"4. Same as #2, but provide a configuration option to not clear the cache"}],"source_content_type":"text/x-rst","patch_set":3,"id":"baada198_c1d546b8","line":125,"in_reply_to":"baada198_9bb3bde8","updated":"2014-07-10 09:38:43.000000000","message":"Good point, which pushes me towards option #1.","commit_id":"c26c4fbbbd9cd7eeeda4903ff69db0ca5f5b6166"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0df4f5e1c6aef3181ce8c1d00698adbf55a34bd2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"We suggest an implementation of a flexible transformer capable of performing"},{"line_number":31,"context_line":"arithmetic operations on multiple meters and/or their metadata. To prevent"},{"line_number":32,"context_line":"irregular cadence of the produced meter, calculation is limited to meters"},{"line_number":33,"context_line":"with the same interval."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_73cea25b","line":33,"updated":"2014-07-14 10:02:58.000000000","message":"How much will it be flexible and \"comfortable\" for the user to set this? I mean now the transformer is part of the sinks, and IIRC each sink can be added to any source currently. So it can result in a bunch of warning messages in the logs, if the user is not careful enough, which can happen in case of a larger pipeline.yaml file.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"a92e179c3af01ec83e246bf62d91a2a0d4887eb1","unresolved":false,"context_lines":[{"line_number":30,"context_line":"We suggest an implementation of a flexible transformer capable of performing"},{"line_number":31,"context_line":"arithmetic operations on multiple meters and/or their metadata. To prevent"},{"line_number":32,"context_line":"irregular cadence of the produced meter, calculation is limited to meters"},{"line_number":33,"context_line":"with the same interval."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_c1494d61","line":33,"in_reply_to":"baada198_052c3898","updated":"2014-07-14 15:15:19.000000000","message":"I agree, #1 is the simplest and most user-friendly.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47384f692846706e3a9d4816333018fea33bf651","unresolved":false,"context_lines":[{"line_number":30,"context_line":"We suggest an implementation of a flexible transformer capable of performing"},{"line_number":31,"context_line":"arithmetic operations on multiple meters and/or their metadata. To prevent"},{"line_number":32,"context_line":"irregular cadence of the produced meter, calculation is limited to meters"},{"line_number":33,"context_line":"with the same interval."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_052c3898","line":33,"in_reply_to":"baada198_36d338d6","updated":"2014-07-14 12:48:08.000000000","message":"Sorry, I have some more meetings today, so now I will write down what\u0027s n the top of my head and then if I will have time I will read all the discussions you referred to.\n\nSo TBH, I do not really like the introducing a new TTL value idea here. As a user, I think I would wish a painfull death for that person, who asks me to give a cache TTL for a simple value calculation... ;) I think in most cases users go for the predefined metrics and they do not want to spend time and effort on defining new ones. Or if they would like to have complex calculations, then they most probably will not do it here. So if we provide something more complex here, than the already existing solution, I think we should keep it as simple as possible, like the first approach.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"79cff72536580b4b0024ec9a02230637711b0a97","unresolved":false,"context_lines":[{"line_number":30,"context_line":"We suggest an implementation of a flexible transformer capable of performing"},{"line_number":31,"context_line":"arithmetic operations on multiple meters and/or their metadata. To prevent"},{"line_number":32,"context_line":"irregular cadence of the produced meter, calculation is limited to meters"},{"line_number":33,"context_line":"with the same interval."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_36d338d6","line":33,"in_reply_to":"baada198_73cea25b","updated":"2014-07-14 10:37:45.000000000","message":"The calculation simply isn\u0027t performed if all the meter\u0027s don\u0027t have the same interval.\n\nThis is a limitation of the currently chosen approach (#1), discussed below. Can you perhaps read the discussion in the previous patches regarding different approaches and provide some more input? (after discussing this with Eoghan, we\u0027re leaning to approach #2 now)","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0df4f5e1c6aef3181ce8c1d00698adbf55a34bd2","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    - name: \"arithmetic\""},{"line_number":38,"context_line":"      parameters:"},{"line_number":39,"context_line":"        target:"},{"line_number":40,"context_line":"          name: \"memory_util\""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_3000a065","line":37,"updated":"2014-07-14 10:02:58.000000000","message":"This name is also just a sample name, right?","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"79cff72536580b4b0024ec9a02230637711b0a97","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    - name: \"arithmetic\""},{"line_number":38,"context_line":"      parameters:"},{"line_number":39,"context_line":"        target:"},{"line_number":40,"context_line":"          name: \"memory_util\""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_d64f5c69","line":37,"in_reply_to":"baada198_3000a065","updated":"2014-07-14 10:37:45.000000000","message":"Nope, this name chooses the transformer. E.g. if you want the rate of change transformer, you use \"rate_of_change\" here.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47384f692846706e3a9d4816333018fea33bf651","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The configuration of the new transformer would be::"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    - name: \"arithmetic\""},{"line_number":38,"context_line":"      parameters:"},{"line_number":39,"context_line":"        target:"},{"line_number":40,"context_line":"          name: \"memory_util\""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a549cc61","line":37,"in_reply_to":"baada198_d64f5c69","updated":"2014-07-14 12:48:08.000000000","message":"Cool, this is what I thought, just as you used this name in all the different examples I wanted to be sure.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0df4f5e1c6aef3181ce8c1d00698adbf55a34bd2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          name: \"memory_util\""},{"line_number":41,"context_line":"          unit: \"%\""},{"line_number":42,"context_line":"          type: \"gauge\""},{"line_number":43,"context_line":"          expr: \"$(memory.usage) / $(memory)\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To demonstrate the use of metadata, here is the implementation of"},{"line_number":46,"context_line":"a silly metric that shows average CPU time per core::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_f08d4832","line":43,"updated":"2014-07-14 10:02:58.000000000","message":"Shouldn\u0027t be here a \u0027* 100\u0027 to get the percentage value?\n\nHow to handle those issues, when we do not have memory.usage available? As for instance this meter is only available for vSphere now.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47384f692846706e3a9d4816333018fea33bf651","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          name: \"memory_util\""},{"line_number":41,"context_line":"          unit: \"%\""},{"line_number":42,"context_line":"          type: \"gauge\""},{"line_number":43,"context_line":"          expr: \"$(memory.usage) / $(memory)\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To demonstrate the use of metadata, here is the implementation of"},{"line_number":46,"context_line":"a silly metric that shows average CPU time per core::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a5b70c39","line":43,"in_reply_to":"baada198_7665b0df","updated":"2014-07-14 12:48:08.000000000","message":"Will this also result in a bunch of Warning logs? Or it\u0027s another case?","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"a92e179c3af01ec83e246bf62d91a2a0d4887eb1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          name: \"memory_util\""},{"line_number":41,"context_line":"          unit: \"%\""},{"line_number":42,"context_line":"          type: \"gauge\""},{"line_number":43,"context_line":"          expr: \"$(memory.usage) / $(memory)\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To demonstrate the use of metadata, here is the implementation of"},{"line_number":46,"context_line":"a silly metric that shows average CPU time per core::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_81b11549","line":43,"in_reply_to":"baada198_a5b70c39","updated":"2014-07-14 15:15:19.000000000","message":"Yes, warning logs. Inside the transformer we can\u0027t distinguish between \u0027a meter doesn\u0027t exist\u0027 and \u0027a sample hasn\u0027t arrived in this particular interval\u0027, so I think we need to report a warning every time.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"79cff72536580b4b0024ec9a02230637711b0a97","unresolved":false,"context_lines":[{"line_number":40,"context_line":"          name: \"memory_util\""},{"line_number":41,"context_line":"          unit: \"%\""},{"line_number":42,"context_line":"          type: \"gauge\""},{"line_number":43,"context_line":"          expr: \"$(memory.usage) / $(memory)\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"To demonstrate the use of metadata, here is the implementation of"},{"line_number":46,"context_line":"a silly metric that shows average CPU time per core::"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_7665b0df","line":43,"in_reply_to":"baada198_f08d4832","updated":"2014-07-14 10:37:45.000000000","message":"It should, yes, my mistake :-). When not all samples are available, the transformation simply isn\u0027t performed. A user can\u0027t expect to have calculation performed on non-existing meters.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0df4f5e1c6aef3181ce8c1d00698adbf55a34bd2","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    $(cpu) -\u003e cpu"},{"line_number":68,"context_line":"    $(cpu_util) -\u003e cpu_util"},{"line_number":69,"context_line":"    $(cpu.util) -\u003e _cpu_util_ESCAPED (in order to avoid clashes with legal"},{"line_number":70,"context_line":"      meter names)"},{"line_number":71,"context_line":"    $(class) -\u003e _class_ESCAPED (avoid clash with Python keywords)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_13b3a60a","line":69,"updated":"2014-07-14 10:02:58.000000000","message":"cpu.util is an example for a meter name containing \u0027.\u0027? Maybe it would be more fortunate to use some other existing meter name here instead of a cureently calculated meter.\n\nIt is the parsing of input or output or both meter names?","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"79cff72536580b4b0024ec9a02230637711b0a97","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    $(cpu) -\u003e cpu"},{"line_number":68,"context_line":"    $(cpu_util) -\u003e cpu_util"},{"line_number":69,"context_line":"    $(cpu.util) -\u003e _cpu_util_ESCAPED (in order to avoid clashes with legal"},{"line_number":70,"context_line":"      meter names)"},{"line_number":71,"context_line":"    $(class) -\u003e _class_ESCAPED (avoid clash with Python keywords)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_96b7a439","line":69,"in_reply_to":"baada198_13b3a60a","updated":"2014-07-14 10:37:45.000000000","message":"This is just for the purpose of demonstrating the semantics of the escaping, does it matter which meter names are used (could be $(is.it.raining.today) -\u003e _is_it_raining_today_ESCAPED).\n\nIt\u0027s about the parsing of the meter names that are used in the transformer\u0027s expression.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"a92e179c3af01ec83e246bf62d91a2a0d4887eb1","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    $(cpu) -\u003e cpu"},{"line_number":68,"context_line":"    $(cpu_util) -\u003e cpu_util"},{"line_number":69,"context_line":"    $(cpu.util) -\u003e _cpu_util_ESCAPED (in order to avoid clashes with legal"},{"line_number":70,"context_line":"      meter names)"},{"line_number":71,"context_line":"    $(class) -\u003e _class_ESCAPED (avoid clash with Python keywords)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_a51e2cb9","line":69,"in_reply_to":"baada198_45f550eb","updated":"2014-07-14 15:15:19.000000000","message":"Yes, of course, escaping is just an implementation detail used internally, not user-facing. And it only applies to the \"expression\" part of the configuration.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47384f692846706e3a9d4816333018fea33bf651","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    $(cpu) -\u003e cpu"},{"line_number":68,"context_line":"    $(cpu_util) -\u003e cpu_util"},{"line_number":69,"context_line":"    $(cpu.util) -\u003e _cpu_util_ESCAPED (in order to avoid clashes with legal"},{"line_number":70,"context_line":"      meter names)"},{"line_number":71,"context_line":"    $(class) -\u003e _class_ESCAPED (avoid clash with Python keywords)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_45f550eb","line":69,"in_reply_to":"baada198_96b7a439","updated":"2014-07-14 12:48:08.000000000","message":"I think it\u0027s just how my brain works, you can keep also this as an example, not a big deal at all. :)\n\nOk, so I can define also \"avg.cpu.per.core\" as calculated meter name, it will remain as is, right?","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"18c47e39a8cea543b8e9771b8b3ab13bd183713c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"* *con*: need to specify maximum age for samples to be used in calculation"},{"line_number":119,"context_line":"* *con*: might produce samples with irregular cadence, as in the case of"},{"line_number":120,"context_line":"    the calculation involving meter A with 60s cadence and meter B with 45s"},{"line_number":121,"context_line":"    cadence"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"3. Similar as #2, but limit only to meters from sources with the same interval."},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_59c61f9b","line":121,"updated":"2014-07-14 10:53:46.000000000","message":"This is not actually true, since the new meter will have 180s cadence in this case (LCM(45, 60)). So this approach is up for grabs again.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"47384f692846706e3a9d4816333018fea33bf651","unresolved":false,"context_lines":[{"line_number":118,"context_line":"* *con*: need to specify maximum age for samples to be used in calculation"},{"line_number":119,"context_line":"* *con*: might produce samples with irregular cadence, as in the case of"},{"line_number":120,"context_line":"    the calculation involving meter A with 60s cadence and meter B with 45s"},{"line_number":121,"context_line":"    cadence"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"3. Similar as #2, but limit only to meters from sources with the same interval."},{"line_number":124,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_45b630fa","line":121,"in_reply_to":"baada198_59c61f9b","updated":"2014-07-14 12:48:08.000000000","message":"I added my concerns above. :)","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"20cbe9a63ebe71ec8b0058c65765b6cae96e44c5","unresolved":false,"context_lines":[{"line_number":251,"context_line":"Documentation Impact"},{"line_number":252,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"Documentation should be added for the new type of transformer."},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"References"}],"source_content_type":"text/x-rst","patch_set":5,"id":"baada198_657faaab","line":254,"updated":"2014-07-14 16:38:24.000000000","message":"We should mention here that the docco should contain the interval related limitation and a Note on checking the supported measurements before setting up a new transformer.","commit_id":"78094a17808b1f27c2412e6da09d68cedc8b52f4"}]}
