)]}'
{"container_config_scripts/monitoring/collectd_check_health.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"6af38cee46fbb0a7d1c578ead18911ad2aa4bfef","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    end \u003d datetime.datetime.strptime(match.group(\u0027timestamp\u0027),"},{"line_number":64,"context_line":"                                                     \u0027%b %d %H:%M:%S\u0027)"},{"line_number":65,"context_line":"                    item[\u0027duration\u0027] \u003d (end - start).seconds"},{"line_number":66,"context_line":"                except Exception as ex:"},{"line_number":67,"context_line":"                    continue"},{"line_number":68,"context_line":"        logfile.truncate()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_ea688a23","line":66,"updated":"2020-09-14 16:38:04.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"f96c02977230b1e495c25f554079a6975938f2a2"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"2bd05ab5f984901ab2bdb0a93f75e16062598517","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    end \u003d datetime.datetime.strptime(match.group(\u0027timestamp\u0027),"},{"line_number":64,"context_line":"                                                     \u0027%b %d %H:%M:%S\u0027)"},{"line_number":65,"context_line":"                    item[\u0027duration\u0027] \u003d (end - start).seconds"},{"line_number":66,"context_line":"                except Exception as ex:"},{"line_number":67,"context_line":"                    continue"},{"line_number":68,"context_line":"        logfile.truncate()"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9f560f44_d2ae1880","line":66,"updated":"2020-09-14 22:07:14.000000000","message":"pep8: F841 local variable \u0027ex\u0027 is assigned to but never used","commit_id":"87e001b06293d7e37db106b59cba1493cafa7543"}],"deployment/metrics/collectd-container-puppet.yaml":[{"author":{"_account_id":28223,"name":"Cedric Jeanneret","display_name":"cjeanner (Tengu)","email":"cjeanner@redhat.com","username":"cjeanner"},"change_message_id":"9048c35adbe50c4ba41375f2b0a8f0ec7b6312ec","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        sys.exit(2)"},{"line_number":404,"context_line":"      \""},{"line_number":405,"context_line":"      EXITCODE\u003d$?"},{"line_number":406,"context_line":"      truncate -s0 /var/log/collectd/healthchecks.log"},{"line_number":407,"context_line":"      exit $EXITCODE"},{"line_number":408,"context_line":"  CollectdContainerHealthCheckInterval:"},{"line_number":409,"context_line":"    type: number"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf51134e_5fb08a43","line":406,"updated":"2020-07-15 05:26:25.000000000","message":"You will probably miss some of the logs doing so, depending on the amount of logs being read before, and the overall time it\u0027s taking. Wondering if there\u0027s a better way to handle that.\nAlso, note that the location and file extension will match the logrotate config, hence it will be rotated on a daily basis.\nThere shouldn\u0027t be 2 things \"managing\" the file imho.","commit_id":"6e70d37bca5ad2f866ad0184cee27a77fbc2874f"},{"author":{"_account_id":5241,"name":"Martin Magr","email":"mmagr@redhat.com","username":"mmagr"},"change_message_id":"27481cb65a0b5f11e701f26c152805eec1eacae3","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        sys.exit(2)"},{"line_number":404,"context_line":"      \""},{"line_number":405,"context_line":"      EXITCODE\u003d$?"},{"line_number":406,"context_line":"      truncate -s0 /var/log/collectd/healthchecks.log"},{"line_number":407,"context_line":"      exit $EXITCODE"},{"line_number":408,"context_line":"  CollectdContainerHealthCheckInterval:"},{"line_number":409,"context_line":"    type: number"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf51134e_8aad9e32","line":406,"in_reply_to":"bf51134e_5fb08a43","updated":"2020-07-16 21:26:35.000000000","message":"Yes that\u0027s unfortunate, but without access to podman inspect I\u0027m afraid I don\u0027t see better alternative. Maybe increase the default interval the check is executed might help.\n\nWithout clearing the file the check could bring container down due to high volume of data to be parsed at the end of the day before logrotate would do the job. When you take into account that container health checks run every few seconds, this check runs every 10s now, parsing old data is IMO not what we want to do, especially when basically only the last state of each container health check is relevant.","commit_id":"6e70d37bca5ad2f866ad0184cee27a77fbc2874f"},{"author":{"_account_id":28223,"name":"Cedric Jeanneret","display_name":"cjeanner (Tengu)","email":"cjeanner@redhat.com","username":"cjeanner"},"change_message_id":"948635cd96191e59e810e4a40892be58afbfdab4","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        sys.exit(2)"},{"line_number":404,"context_line":"      \""},{"line_number":405,"context_line":"      EXITCODE\u003d$?"},{"line_number":406,"context_line":"      truncate -s0 /var/log/collectd/healthchecks.log"},{"line_number":407,"context_line":"      exit $EXITCODE"},{"line_number":408,"context_line":"  CollectdContainerHealthCheckInterval:"},{"line_number":409,"context_line":"    type: number"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf51134e_cc9faf4f","line":406,"in_reply_to":"bf51134e_8aad9e32","updated":"2020-07-17 06:47:16.000000000","message":"We could at least avoid the logrotate issue using another extension than .log. Care to do that change, so that we get only ONE job managing the file? That\u0027s probably the only thing we can do right now, seeing the limitations in podman itself :(.","commit_id":"6e70d37bca5ad2f866ad0184cee27a77fbc2874f"},{"author":{"_account_id":14985,"name":"Alex Schultz","email":"aschultz@next-development.com","username":"mwhahaha"},"change_message_id":"81a8357ab7dfee7074dd35288246971b02ba5b99","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  CollectdContainerHealthCheckCommand:"},{"line_number":347,"context_line":"    type: string"},{"line_number":348,"context_line":"    default: |"},{"line_number":349,"context_line":"      python3 -c \""},{"line_number":350,"context_line":"      import datetime"},{"line_number":351,"context_line":"      import re"},{"line_number":352,"context_line":"      import sys"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"      HCLOG \u003d \u0027/var/log/collectd/healthchecks.stdout\u0027"},{"line_number":355,"context_line":"      START_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) systemd\\[.*\\]: Started /usr/bin/podman healthcheck run (?P\u003ccontainer_id\u003e\\w*)\u0027)"},{"line_number":356,"context_line":"      EXEC_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) podman\\[(?P\u003cpid\u003e\\d*)\\]: (?P\u003ctrash\u003e.*) container exec (?P\u003ccontainer_id\u003e\\w*) \\(.*name\u003d(?P\u003ccontainer_name\u003e\\w*).*\\)\u0027)"},{"line_number":357,"context_line":"      RESULT_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) podman\\[(?P\u003cpid\u003e\\d*)\\]: (?P\u003cresult\u003e(un)?healthy)\u0027)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"      data \u003d {}"},{"line_number":360,"context_line":"      pid_map \u003d {}"},{"line_number":361,"context_line":"      with open(HCLOG) as logfile:"},{"line_number":362,"context_line":"        for line in logfile:"},{"line_number":363,"context_line":"          match \u003d START_RE.search(line)"},{"line_number":364,"context_line":"          if match:"},{"line_number":365,"context_line":"            item \u003d data.setdefault(match.group(\u0027container_id\u0027), {})"},{"line_number":366,"context_line":"            item [\u0027timestamp_start\u0027] \u003d match.group(\u0027timestamp\u0027)"},{"line_number":367,"context_line":"            item [\u0027host\u0027] \u003d match.group(\u0027host\u0027)"},{"line_number":368,"context_line":"            continue"},{"line_number":369,"context_line":"          match \u003d EXEC_RE.search(line)"},{"line_number":370,"context_line":"          if match:"},{"line_number":371,"context_line":"            item \u003d data.setdefault(match.group(\u0027container_id\u0027), {})"},{"line_number":372,"context_line":"            item[\u0027container_name\u0027] \u003d match.group(\u0027container_name\u0027)"},{"line_number":373,"context_line":"            item[\u0027host\u0027] \u003d match.group(\u0027host\u0027)"},{"line_number":374,"context_line":"            item[\u0027pid\u0027] \u003d match.group(\u0027pid\u0027)"},{"line_number":375,"context_line":"            pid_map[match.group(\u0027pid\u0027)] \u003d match.group(\u0027container_id\u0027)"},{"line_number":376,"context_line":"            continue"},{"line_number":377,"context_line":"          match \u003d RESULT_RE.search(line)"},{"line_number":378,"context_line":"          if match:"},{"line_number":379,"context_line":"            if match.group(\u0027pid\u0027) not in pid_map:"},{"line_number":380,"context_line":"              continue"},{"line_number":381,"context_line":"            item \u003d data[pid_map[match.group(\u0027pid\u0027)]]"},{"line_number":382,"context_line":"            item[\u0027result\u0027] \u003d match.group(\u0027result\u0027)"},{"line_number":383,"context_line":"            if \u0027timestamp_start\u0027 not in item:"},{"line_number":384,"context_line":"              continue"},{"line_number":385,"context_line":"            try:"},{"line_number":386,"context_line":"              start \u003d datetime.datetime.strptime(item[\u0027timestamp_start\u0027], \u0027%b %d %H:%M:%S\u0027)"},{"line_number":387,"context_line":"              end \u003d datetime.datetime.strptime(match.group(\u0027timestamp\u0027), \u0027%b %d %H:%M:%S\u0027)"},{"line_number":388,"context_line":"              item[\u0027duration\u0027] \u003d (end - start).seconds"},{"line_number":389,"context_line":"            except Exception as ex:"},{"line_number":390,"context_line":"              continue"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"      unhealthy \u003d []"},{"line_number":393,"context_line":"      for container in data.values():"},{"line_number":394,"context_line":"        if \u0027result\u0027 not in container:"},{"line_number":395,"context_line":"          continue"},{"line_number":396,"context_line":"        if container[\u0027result\u0027] \u003d\u003d \u0027healthy\u0027:"},{"line_number":397,"context_line":"          continue"},{"line_number":398,"context_line":"        log \u003d \u0027{container_name}: Container health check on host {host} results as {result} after {duration}s.\u0027"},{"line_number":399,"context_line":"        unhealthy.append(log.format(**container))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"      print(\u0027 ; \u0027.join(unhealthy))"},{"line_number":402,"context_line":"      if unhealthy:"},{"line_number":403,"context_line":"        sys.exit(2)"},{"line_number":404,"context_line":"      \""},{"line_number":405,"context_line":"      EXITCODE\u003d$?"},{"line_number":406,"context_line":"      truncate -s0 /var/log/collectd/healthchecks.stdout"},{"line_number":407,"context_line":"      exit $EXITCODE"},{"line_number":408,"context_line":"  CollectdContainerHealthCheckInterval:"},{"line_number":409,"context_line":"    type: number"},{"line_number":410,"context_line":"    description: The frequency in seconds the docker health check is executed."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f560f44_e9362103","line":407,"range":{"start_line":349,"start_character":0,"end_line":407,"end_character":20},"updated":"2020-08-06 13:15:15.000000000","message":"I\u0027m sorry but no. It was bad enough we did this in the first place but we should not continue this with even more code.  Please ship this in an rpm or some other method.","commit_id":"42f3c496fa924fe416a2d098d40b7f560b3a3e8b"},{"author":{"_account_id":5241,"name":"Martin Magr","email":"mmagr@redhat.com","username":"mmagr"},"change_message_id":"ee345a6278a2b779320d40fe6f8373f6826303e0","unresolved":false,"context_lines":[{"line_number":346,"context_line":"  CollectdContainerHealthCheckCommand:"},{"line_number":347,"context_line":"    type: string"},{"line_number":348,"context_line":"    default: |"},{"line_number":349,"context_line":"      python3 -c \""},{"line_number":350,"context_line":"      import datetime"},{"line_number":351,"context_line":"      import re"},{"line_number":352,"context_line":"      import sys"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"      HCLOG \u003d \u0027/var/log/collectd/healthchecks.stdout\u0027"},{"line_number":355,"context_line":"      START_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) systemd\\[.*\\]: Started /usr/bin/podman healthcheck run (?P\u003ccontainer_id\u003e\\w*)\u0027)"},{"line_number":356,"context_line":"      EXEC_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) podman\\[(?P\u003cpid\u003e\\d*)\\]: (?P\u003ctrash\u003e.*) container exec (?P\u003ccontainer_id\u003e\\w*) \\(.*name\u003d(?P\u003ccontainer_name\u003e\\w*).*\\)\u0027)"},{"line_number":357,"context_line":"      RESULT_RE \u003d re.compile(r\u0027(?P\u003ctimestamp\u003e\\w{3} \\d{2} \\d{2}\\:\\d{2}\\:\\d{2}) (?P\u003chost\u003e[\\w\\-\\.\\:]*) podman\\[(?P\u003cpid\u003e\\d*)\\]: (?P\u003cresult\u003e(un)?healthy)\u0027)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"      data \u003d {}"},{"line_number":360,"context_line":"      pid_map \u003d {}"},{"line_number":361,"context_line":"      with open(HCLOG) as logfile:"},{"line_number":362,"context_line":"        for line in logfile:"},{"line_number":363,"context_line":"          match \u003d START_RE.search(line)"},{"line_number":364,"context_line":"          if match:"},{"line_number":365,"context_line":"            item \u003d data.setdefault(match.group(\u0027container_id\u0027), {})"},{"line_number":366,"context_line":"            item [\u0027timestamp_start\u0027] \u003d match.group(\u0027timestamp\u0027)"},{"line_number":367,"context_line":"            item [\u0027host\u0027] \u003d match.group(\u0027host\u0027)"},{"line_number":368,"context_line":"            continue"},{"line_number":369,"context_line":"          match \u003d EXEC_RE.search(line)"},{"line_number":370,"context_line":"          if match:"},{"line_number":371,"context_line":"            item \u003d data.setdefault(match.group(\u0027container_id\u0027), {})"},{"line_number":372,"context_line":"            item[\u0027container_name\u0027] \u003d match.group(\u0027container_name\u0027)"},{"line_number":373,"context_line":"            item[\u0027host\u0027] \u003d match.group(\u0027host\u0027)"},{"line_number":374,"context_line":"            item[\u0027pid\u0027] \u003d match.group(\u0027pid\u0027)"},{"line_number":375,"context_line":"            pid_map[match.group(\u0027pid\u0027)] \u003d match.group(\u0027container_id\u0027)"},{"line_number":376,"context_line":"            continue"},{"line_number":377,"context_line":"          match \u003d RESULT_RE.search(line)"},{"line_number":378,"context_line":"          if match:"},{"line_number":379,"context_line":"            if match.group(\u0027pid\u0027) not in pid_map:"},{"line_number":380,"context_line":"              continue"},{"line_number":381,"context_line":"            item \u003d data[pid_map[match.group(\u0027pid\u0027)]]"},{"line_number":382,"context_line":"            item[\u0027result\u0027] \u003d match.group(\u0027result\u0027)"},{"line_number":383,"context_line":"            if \u0027timestamp_start\u0027 not in item:"},{"line_number":384,"context_line":"              continue"},{"line_number":385,"context_line":"            try:"},{"line_number":386,"context_line":"              start \u003d datetime.datetime.strptime(item[\u0027timestamp_start\u0027], \u0027%b %d %H:%M:%S\u0027)"},{"line_number":387,"context_line":"              end \u003d datetime.datetime.strptime(match.group(\u0027timestamp\u0027), \u0027%b %d %H:%M:%S\u0027)"},{"line_number":388,"context_line":"              item[\u0027duration\u0027] \u003d (end - start).seconds"},{"line_number":389,"context_line":"            except Exception as ex:"},{"line_number":390,"context_line":"              continue"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"      unhealthy \u003d []"},{"line_number":393,"context_line":"      for container in data.values():"},{"line_number":394,"context_line":"        if \u0027result\u0027 not in container:"},{"line_number":395,"context_line":"          continue"},{"line_number":396,"context_line":"        if container[\u0027result\u0027] \u003d\u003d \u0027healthy\u0027:"},{"line_number":397,"context_line":"          continue"},{"line_number":398,"context_line":"        log \u003d \u0027{container_name}: Container health check on host {host} results as {result} after {duration}s.\u0027"},{"line_number":399,"context_line":"        unhealthy.append(log.format(**container))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"      print(\u0027 ; \u0027.join(unhealthy))"},{"line_number":402,"context_line":"      if unhealthy:"},{"line_number":403,"context_line":"        sys.exit(2)"},{"line_number":404,"context_line":"      \""},{"line_number":405,"context_line":"      EXITCODE\u003d$?"},{"line_number":406,"context_line":"      truncate -s0 /var/log/collectd/healthchecks.stdout"},{"line_number":407,"context_line":"      exit $EXITCODE"},{"line_number":408,"context_line":"  CollectdContainerHealthCheckInterval:"},{"line_number":409,"context_line":"    type: number"},{"line_number":410,"context_line":"    description: The frequency in seconds the docker health check is executed."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f560f44_d73d86c4","line":407,"range":{"start_line":349,"start_character":0,"end_line":407,"end_character":20},"in_reply_to":"9f560f44_e9362103","updated":"2020-08-10 15:14:33.000000000","message":"sigh ... ok","commit_id":"42f3c496fa924fe416a2d098d40b7f560b3a3e8b"}]}
