.tekton/.currency/scripts/generate_report.py in instana-1.215.1 vs .tekton/.currency/scripts/generate_report.py in instana-1.216.0

- old
+ new

@@ -1,152 +1,59 @@ # Standard Libraries +import glob import re from json import load # Third Party from requests import get from pandas import DataFrame from bs4 import BeautifulSoup -from kubernetes import client, config JSON_FILE = "resources/table.json" REPORT_FILE = "docs/report.md" API_V1_ENDPOINT = "https://rubygems.org/api/v1/versions/" -def filter_taskruns(taskrun_filter, taskruns): - filtered_taskruns = list(filter(taskrun_filter, taskruns)) - filtered_taskruns.sort( - key=lambda tr: tr["metadata"]["creationTimestamp"], reverse=True - ) +def get_bundle_install_output(): - return filtered_taskruns + libraries_from_logs = { + "cuba": "cuba_40_ruby_3.3.", + "excon": "excon_100_ruby_3.3.", + "graphql": "graphql_20_ruby_3.3.", + "grpc": "grpc_10_ruby_3.3.", + "rack": "rack_30_ruby_3.3.", + "rest-client": "rest_client_20_ruby_3.3.", + "roda": "roda_30_ruby_3.3.", + "sinatra": "sinatra_40_ruby_3.3.", + "net-http": "net_http_01_ruby_3.1.", + "rails": "rails_71_sqlite3_ruby_3.3.", + "dalli": "dalli_32_ruby_3.3.", + "resque": "resque_20_ruby_3.3.", + "sidekiq": "sidekiq_70_ruby_3.3." + } + bundle_install_output = "" -def get_taskruns(namespace, task_name): - group = "tekton.dev" - version = "v1" - plural = "taskruns" + for library, pattern in libraries_from_logs.items(): + glob_result = glob.glob(f"../../dep_{pattern}*") + if not glob_result: + print(f"Could not find bundle install log for gem '{library}'.") + continue - # access the custom resource from tekton - tektonV1 = client.CustomObjectsApi() - taskruns = tektonV1.list_namespaced_custom_object( - group, - version, - namespace, - plural, - label_selector=f"{group}/task={task_name}, triggers.tekton.dev/trigger=ruby-tracer-scheduled-pipeline-triggger", - )["items"] + with open(glob_result[0], 'r') as file: + logs = file.read().replace('\n', ' ') - return taskruns - - -def process_taskrun_logs( - taskruns, core_v1_client, namespace, library, tekton_ci_output -): - for tr in taskruns: - pod_name = tr["status"]["podName"] - taskrun_name = tr["metadata"]["name"] - logs = core_v1_client.read_namespaced_pod_log( - pod_name, namespace, container="step-unittest" - ) if "Installing" not in logs: - print( - f"Unable to retrieve logs from taskrun pod {pod_name} of taskrun {taskrun_name} for gem {library}." - ) + print( f"Unable to retrieve logs from for gem '{library}'.") continue - print( - f"Retrieving logs from taskrun pod {pod_name} of taskrun {taskrun_name} for gem {library}.." - ) - + print(f"Retrieving currency for gem '{library}'.") match = re.search(f"Installing ({library} [^\s]+)", logs) - tekton_ci_output += f"{match[1]}\n" - break + bundle_install_output += f"{match[1]}\n" - return tekton_ci_output + return bundle_install_output -def get_tekton_ci_output(): - config.load_incluster_config() - - namespace = "default" - core_v1_client = client.CoreV1Api() - - ruby_33_prefix = "unittest-default-ruby-33-" - ruby_31_prefix = "unittest-default-ruby-31-" - - default_libraries_dict = { - "cuba": f"{ruby_33_prefix}1", - "excon": f"{ruby_33_prefix}4", - "graphql": f"{ruby_33_prefix}6", - "grpc": f"{ruby_33_prefix}7", - "rack": f"{ruby_33_prefix}10", - "rest-client": f"{ruby_33_prefix}11", - "roda": f"{ruby_33_prefix}13", - "sinatra": f"{ruby_33_prefix}16", - "net-http": f"{ruby_31_prefix}8", - } - - tekton_ci_output = "" - task_name = "ruby-tracer-unittest-default-libraries-task" - default_taskruns = get_taskruns(namespace, task_name) - - for library, pattern in default_libraries_dict.items(): - taskrun_filter = ( - lambda tr: tr["metadata"]["name"].endswith(pattern) - and tr["status"]["conditions"][0]["type"] == "Succeeded" - ) - filtered_default_taskruns = filter_taskruns(taskrun_filter, default_taskruns) - - tekton_ci_output = process_taskrun_logs( - filtered_default_taskruns, - core_v1_client, - namespace, - library, - tekton_ci_output, - ) - - other_libraries_dict = { - "rails": { - "pattern": "rails-postgres-11", - "task_name": "ruby-tracer-unittest-rails-postgres-task", - }, - "dalli": { - "pattern": "memcached-11", - "task_name": "ruby-tracer-unittest-memcached-libraries-task", - }, - "resque": { - "pattern": "unittest-redis-ruby-32-33-9", - "task_name": "ruby-tracer-unittest-redis-libraries-task", - }, - "sidekiq": { - "pattern": "unittest-redis-ruby-32-33-18", - "task_name": "ruby-tracer-unittest-redis-libraries-task", - }, - } - - for library, inner_dict in other_libraries_dict.items(): - pattern = inner_dict["pattern"] - task_name = inner_dict["task_name"] - taskrun_filter = ( - lambda tr: tr["metadata"]["name"].endswith(pattern) - and tr["status"]["conditions"][0]["type"] == "Succeeded" - ) - other_taskruns = get_taskruns(namespace, task_name) - filtered_other_taskruns = filter_taskruns(taskrun_filter, other_taskruns) - - tekton_ci_output = process_taskrun_logs( - filtered_other_taskruns, - core_v1_client, - namespace, - library, - tekton_ci_output - ) - - return tekton_ci_output - - def get_upstream_version(dependency): """get the latest version available upstream""" if dependency != "rails lts": response = get(f"{API_V1_ENDPOINT}/{dependency}/latest.json") response_json = response.json() @@ -159,15 +66,15 @@ pattern = "(\d+\.\d+\.?\d*)" latest_version = re.search(pattern, text)[1] return latest_version -def get_last_supported_version(tekton_ci_output, dependency): +def get_last_supported_version(bundle_install_output, dependency): """get up-to-date supported version""" pattern = r" ([^\s]+)" - last_supported_version = re.search(dependency + pattern, tekton_ci_output, flags=re.I | re.M) + last_supported_version = re.search(dependency + pattern, bundle_install_output, flags=re.I | re.M) return last_supported_version[1] def isUptodate(last_supported_version, latest_version): @@ -181,21 +88,21 @@ def main(): # Read the JSON file with open(JSON_FILE) as file: data = load(file) - tekton_ci_output = get_tekton_ci_output() + bundle_install_output = get_bundle_install_output() items = data["table"] for item in items: package = item["Package name"] package = package.lower().replace("::", "-") latest_version = get_upstream_version(package) if not package in ["rails lts", "rails-api"]: - last_supported_version = get_last_supported_version(tekton_ci_output, package) + last_supported_version = get_last_supported_version(bundle_install_output, package) else: last_supported_version = latest_version up_to_date = isUptodate(last_supported_version, latest_version)