instana 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/setup.rb +1 -0
  3. data/lib/instana/span_filtering/condition.rb +134 -0
  4. data/lib/instana/span_filtering/configuration.rb +262 -0
  5. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  6. data/lib/instana/span_filtering.rb +62 -0
  7. data/lib/instana/trace/span.rb +5 -3
  8. data/lib/instana/version.rb +1 -1
  9. metadata +7 -258
  10. data/.circleci/config.yml +0 -361
  11. data/.codeclimate.yml +0 -23
  12. data/.editorconfig +0 -10
  13. data/.fasterer.yml +0 -23
  14. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  15. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  16. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  17. data/.github/workflows/release-notification-on-slack.yml +0 -34
  18. data/.gitignore +0 -19
  19. data/.rubocop.yml +0 -34
  20. data/.rubocop_todo.yml +0 -1140
  21. data/.tekton/.currency/docs/report.md +0 -20
  22. data/.tekton/.currency/resources/requirements.txt +0 -4
  23. data/.tekton/.currency/resources/table.json +0 -100
  24. data/.tekton/.currency/scripts/generate_report.py +0 -308
  25. data/.tekton/README.md +0 -278
  26. data/.tekton/github-interceptor-secret.yaml +0 -8
  27. data/.tekton/github-pr-eventlistener.yaml +0 -104
  28. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  29. data/.tekton/github-set-status-task.yaml +0 -43
  30. data/.tekton/github-webhook-ingress.yaml +0 -20
  31. data/.tekton/pipeline.yaml +0 -484
  32. data/.tekton/pipelinerun.yaml +0 -21
  33. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  34. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  35. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  36. data/.tekton/run_unittests.sh +0 -87
  37. data/.tekton/scheduled-eventlistener.yaml +0 -108
  38. data/.tekton/task.yaml +0 -453
  39. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  40. data/Appraisals +0 -124
  41. data/CONTRIBUTING.md +0 -86
  42. data/Gemfile +0 -22
  43. data/LICENSE +0 -22
  44. data/MAINTAINERS.md +0 -3
  45. data/Rakefile +0 -49
  46. data/bin/announce_release_on_slack.py +0 -103
  47. data/docker-compose.yml +0 -20
  48. data/download.sh +0 -85
  49. data/examples/otel.rb +0 -98
  50. data/examples/tracing.rb +0 -85
  51. data/extras/license_header.rb +0 -44
  52. data/gemfiles/.bundle/config +0 -2
  53. data/gemfiles/aws_30.gemfile +0 -21
  54. data/gemfiles/aws_60.gemfile +0 -16
  55. data/gemfiles/cuba_30.gemfile +0 -16
  56. data/gemfiles/cuba_40.gemfile +0 -13
  57. data/gemfiles/dalli_20.gemfile +0 -15
  58. data/gemfiles/dalli_30.gemfile +0 -12
  59. data/gemfiles/dalli_32.gemfile +0 -12
  60. data/gemfiles/excon_0100.gemfile +0 -14
  61. data/gemfiles/excon_021.gemfile +0 -17
  62. data/gemfiles/excon_079.gemfile +0 -17
  63. data/gemfiles/excon_100.gemfile +0 -14
  64. data/gemfiles/graphql_10.gemfile +0 -16
  65. data/gemfiles/graphql_20.gemfile +0 -15
  66. data/gemfiles/grpc_10.gemfile +0 -15
  67. data/gemfiles/mongo_216.gemfile +0 -15
  68. data/gemfiles/mongo_219.gemfile +0 -12
  69. data/gemfiles/net_http_01.gemfile +0 -17
  70. data/gemfiles/rack_16.gemfile +0 -15
  71. data/gemfiles/rack_20.gemfile +0 -15
  72. data/gemfiles/rack_30.gemfile +0 -13
  73. data/gemfiles/rails_42.gemfile +0 -18
  74. data/gemfiles/rails_50.gemfile +0 -19
  75. data/gemfiles/rails_52.gemfile +0 -19
  76. data/gemfiles/rails_60.gemfile +0 -19
  77. data/gemfiles/rails_61.gemfile +0 -21
  78. data/gemfiles/rails_70.gemfile +0 -18
  79. data/gemfiles/rails_71.gemfile +0 -17
  80. data/gemfiles/rails_80.gemfile +0 -17
  81. data/gemfiles/redis_40.gemfile +0 -15
  82. data/gemfiles/redis_50.gemfile +0 -13
  83. data/gemfiles/redis_51.gemfile +0 -13
  84. data/gemfiles/resque_122.gemfile +0 -16
  85. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  86. data/gemfiles/resque_20.gemfile +0 -16
  87. data/gemfiles/rest_client_16.gemfile +0 -17
  88. data/gemfiles/rest_client_20.gemfile +0 -17
  89. data/gemfiles/roda_20.gemfile +0 -16
  90. data/gemfiles/roda_30.gemfile +0 -16
  91. data/gemfiles/rubocop_162.gemfile +0 -6
  92. data/gemfiles/sequel_56.gemfile +0 -16
  93. data/gemfiles/sequel_57.gemfile +0 -16
  94. data/gemfiles/sequel_58.gemfile +0 -16
  95. data/gemfiles/shoryuken_50.gemfile +0 -16
  96. data/gemfiles/shoryuken_60.gemfile +0 -13
  97. data/gemfiles/sidekiq_42.gemfile +0 -15
  98. data/gemfiles/sidekiq_50.gemfile +0 -15
  99. data/gemfiles/sidekiq_60.gemfile +0 -12
  100. data/gemfiles/sidekiq_65.gemfile +0 -12
  101. data/gemfiles/sidekiq_70.gemfile +0 -12
  102. data/gemfiles/sinatra_14.gemfile +0 -15
  103. data/gemfiles/sinatra_22.gemfile +0 -12
  104. data/gemfiles/sinatra_30.gemfile +0 -12
  105. data/gemfiles/sinatra_40.gemfile +0 -12
  106. data/instana.gemspec +0 -53
  107. data/log/.keep +0 -0
  108. data/sonar-project.properties +0 -9
  109. data/test/activator_test.rb +0 -50
  110. data/test/backend/agent_test.rb +0 -80
  111. data/test/backend/gc_snapshot_test.rb +0 -11
  112. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  113. data/test/backend/host_agent_lookup_test.rb +0 -78
  114. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  115. data/test/backend/host_agent_test.rb +0 -89
  116. data/test/backend/process_info_test.rb +0 -83
  117. data/test/backend/request_client_test.rb +0 -39
  118. data/test/backend/serverless_agent_test.rb +0 -83
  119. data/test/benchmarks/bench_id_generation.rb +0 -15
  120. data/test/benchmarks/bench_opentracing.rb +0 -16
  121. data/test/config_test.rb +0 -34
  122. data/test/frameworks/cuba_test.rb +0 -61
  123. data/test/frameworks/roda_test.rb +0 -60
  124. data/test/frameworks/sinatra_test.rb +0 -71
  125. data/test/instana_test.rb +0 -37
  126. data/test/instrumentation/aws_test.rb +0 -241
  127. data/test/instrumentation/dalli_test.rb +0 -325
  128. data/test/instrumentation/excon_test.rb +0 -204
  129. data/test/instrumentation/graphql_test.rb +0 -289
  130. data/test/instrumentation/grpc_test.rb +0 -420
  131. data/test/instrumentation/mongo_test.rb +0 -68
  132. data/test/instrumentation/net_http_test.rb +0 -220
  133. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  134. data/test/instrumentation/rack_test.rb +0 -415
  135. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  136. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  137. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  138. data/test/instrumentation/rails_action_view_test.rb +0 -154
  139. data/test/instrumentation/rails_active_job_test.rb +0 -65
  140. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  141. data/test/instrumentation/rails_active_record_test.rb +0 -116
  142. data/test/instrumentation/redis_test.rb +0 -152
  143. data/test/instrumentation/resque_test.rb +0 -188
  144. data/test/instrumentation/rest_client_test.rb +0 -106
  145. data/test/instrumentation/sequel_test.rb +0 -111
  146. data/test/instrumentation/shoryuken_test.rb +0 -47
  147. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  148. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  149. data/test/secrets_test.rb +0 -112
  150. data/test/serverless_test.rb +0 -369
  151. data/test/snapshot/deltable_test.rb +0 -17
  152. data/test/snapshot/docker_container_test.rb +0 -82
  153. data/test/snapshot/fargate_container_test.rb +0 -82
  154. data/test/snapshot/fargate_process_test.rb +0 -35
  155. data/test/snapshot/fargate_task_test.rb +0 -49
  156. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  157. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  158. data/test/snapshot/lambda_function_test.rb +0 -37
  159. data/test/snapshot/ruby_process_test.rb +0 -32
  160. data/test/support/apps/active_record/active_record.rb +0 -24
  161. data/test/support/apps/grpc/boot.rb +0 -23
  162. data/test/support/apps/grpc/grpc_server.rb +0 -84
  163. data/test/support/apps/http_endpoint/boot.rb +0 -28
  164. data/test/support/apps/rails/boot.rb +0 -219
  165. data/test/support/apps/rails/models/block.rb +0 -21
  166. data/test/support/apps/rails/models/block6.rb +0 -21
  167. data/test/support/apps/resque/boot.rb +0 -5
  168. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  169. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  170. data/test/support/apps/sidekiq/boot.rb +0 -25
  171. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  172. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  173. data/test/support/apps/sidekiq/worker.rb +0 -37
  174. data/test/support/helpers.rb +0 -85
  175. data/test/support/mock_timer.rb +0 -20
  176. data/test/test_helper.rb +0 -69
  177. data/test/trace/custom_test.rb +0 -233
  178. data/test/trace/id_management_test.rb +0 -78
  179. data/test/trace/instrumented_logger_test.rb +0 -39
  180. data/test/trace/processor_test.rb +0 -58
  181. data/test/trace/span_context_test.rb +0 -22
  182. data/test/trace/span_test.rb +0 -179
  183. data/test/trace/tracer_async_test.rb +0 -243
  184. data/test/trace/tracer_provider_test.rb +0 -148
  185. data/test/trace/tracer_test.rb +0 -363
  186. data/test/util_test.rb +0 -10
@@ -1,20 +0,0 @@
1
- ##### This page is auto-generated. Any change will be overwritten after the next sync. Please apply changes directly to the files in the [ruby tracer](https://github.com/instana/ruby-sensor) repo.
2
- ## Ruby supported packages and versions
3
- | Package name | Support Policy | Beta version | Last Supported Version | Latest version | Up-to-date | Cloud Native |
4
- |:---------------|:-----------------|:---------------|:-------------------------|:-----------------|:-------------|:---------------|
5
- | Cuba | On demand | No | 4.0.3 | 4.0.3 | Yes | No |
6
- | Rack | 45-days | No | 3.1.7 | 3.1.7 | Yes | No |
7
- | Rails | 45-days | No | 7.2.1 | 7.2.1 | Yes | No |
8
- | Rails::API | 45-days | No | 0.4.1 | 0.4.1 | Yes | No |
9
- | Rails LTS | On demand | No | 6.1 | 6.1 | Yes | No |
10
- | Roda | 45-days | No | 3.84.0 | 3.84.0 | Yes | No |
11
- | Sinatra | 45-days | No | 4.0.0 | 4.0.0 | Yes | No |
12
- | Excon | 45-days | No | 0.112.0 | 0.112.0 | Yes | Yes |
13
- | gRPC | 45-days | No | 1.66.0 | 1.66.0 | Yes | No |
14
- | Net::HTTP | 0-day | Yes | 0.4.1 | 0.4.1 | Yes | No |
15
- | Rest-Client | 45-days | No | 2.1.0 | 2.1.0 | Yes | No |
16
- | Dalli | 45-days | No | 3.2.8 | 3.2.8 | Yes | No |
17
- | Resque | 45-days | No | 2.6.0 | 2.6.0 | Yes | Yes |
18
- | Sidekiq | 45-days | No | 7.3.2 | 7.3.2 | Yes | Yes |
19
- | GraphQL | 45-days | No | 2.3.17 | 2.3.17 | Yes | Yes |
20
- | Sequel | 45-days | No | 5.60.0 | 5.84.0 | Yes | No |
@@ -1,4 +0,0 @@
1
- requests
2
- pandas
3
- beautifulsoup4
4
- tabulate
@@ -1,100 +0,0 @@
1
- {
2
- "table": [
3
- {
4
- "Package name": "Cuba",
5
- "Support Policy": "On demand",
6
- "Beta version": "No",
7
- "Cloud Native": "No"
8
- },
9
- {
10
- "Package name": "Rack",
11
- "Support Policy": "45-days",
12
- "Beta version": "No",
13
- "Cloud Native": "No"
14
- },
15
- {
16
- "Package name": "Rails",
17
- "Support Policy": "45-days",
18
- "Beta version": "No",
19
- "Cloud Native": "No"
20
- },
21
- {
22
- "Package name": "Rails::API",
23
- "Support Policy": "45-days",
24
- "Beta version": "No",
25
- "Cloud Native": "No"
26
- },
27
- {
28
- "Package name": "Rails LTS",
29
- "Support Policy": "On demand",
30
- "Beta version": "No",
31
- "Cloud Native": "No"
32
- },
33
- {
34
- "Package name": "Roda",
35
- "Support Policy": "45-days",
36
- "Beta version": "No",
37
- "Cloud Native": "No"
38
- },
39
- {
40
- "Package name": "Sinatra",
41
- "Support Policy": "45-days",
42
- "Beta version": "No",
43
- "Cloud Native": "No"
44
- },
45
- {
46
- "Package name": "Excon",
47
- "Support Policy": "45-days",
48
- "Beta version": "No",
49
- "Cloud Native": "Yes"
50
- },
51
- {
52
- "Package name": "gRPC",
53
- "Support Policy": "45-days",
54
- "Beta version": "No",
55
- "Cloud Native": "No"
56
- },
57
- {
58
- "Package name": "Net::HTTP",
59
- "Support Policy": "0-day",
60
- "Beta version": "Yes",
61
- "Cloud Native": "No"
62
- },
63
- {
64
- "Package name": "Rest-Client",
65
- "Support Policy": "45-days",
66
- "Beta version": "No",
67
- "Cloud Native": "No"
68
- },
69
- {
70
- "Package name": "Dalli",
71
- "Support Policy": "45-days",
72
- "Beta version": "No",
73
- "Cloud Native": "No"
74
- },
75
- {
76
- "Package name": "Resque",
77
- "Support Policy": "45-days",
78
- "Beta version": "No",
79
- "Cloud Native": "Yes"
80
- },
81
- {
82
- "Package name": "Sidekiq",
83
- "Support Policy": "45-days",
84
- "Beta version": "No",
85
- "Cloud Native": "Yes"
86
- },
87
- {
88
- "Package name": "GraphQL",
89
- "Support Policy": "45-days",
90
- "Beta version": "No",
91
- "Cloud Native": "Yes"
92
- },
93
- {
94
- "Package name": "Sequel",
95
- "Support Policy": "45-days",
96
- "Beta version": "No",
97
- "Cloud Native": "Yes"
98
- }
99
- ]
100
- }
@@ -1,308 +0,0 @@
1
- # Standard Libraries
2
- import glob
3
- import re
4
- from json import load
5
- from datetime import datetime
6
-
7
- # Third Party
8
- from requests import get
9
- from pandas import DataFrame
10
- from bs4 import BeautifulSoup
11
-
12
- JSON_FILE = "resources/table.json"
13
- REPORT_FILE = "docs/report.md"
14
- API_V1_ENDPOINT = "https://rubygems.org/api/v1/versions/"
15
- GEM_INFO_ENDPOINT = "https://rubygems.org/api/v1/gems/"
16
-
17
-
18
- def get_bundle_install_output():
19
- libraries_from_logs = {
20
- "cuba": "cuba_40_ruby_3.3.",
21
- "excon": "excon_100_ruby_3.3.",
22
- "graphql": "graphql_20_ruby_3.3.",
23
- "grpc": "grpc_10_ruby_3.3.",
24
- "rack": "rack_30_ruby_3.3.",
25
- "rest-client": "rest_client_20_ruby_3.3.",
26
- "roda": "roda_30_ruby_3.3.",
27
- "sinatra": "sinatra_40_ruby_3.3.",
28
- "net-http": "net_http_01_ruby_3.1.",
29
- "rails": "rails_71_sqlite3_ruby_3.3.",
30
- "dalli": "dalli_32_ruby_3.3.",
31
- "resque": "resque_20_ruby_3.3.",
32
- "sidekiq": "sidekiq_70_ruby_3.3.",
33
- "sequel": "sequel_58_ruby_3.3.",
34
- }
35
-
36
- bundle_install_output = ""
37
-
38
- for library, pattern in libraries_from_logs.items():
39
- glob_result = glob.glob(f"../../dep_{pattern}*")
40
-
41
- if not glob_result:
42
- print(f"Could not find bundle install log for gem '{library}'.")
43
- continue
44
-
45
- with open(glob_result[0], "r") as file:
46
- logs = file.read().replace("\n", " ")
47
-
48
- if "Installing" not in logs:
49
- print(f"Unable to retrieve logs from for gem '{library}'.")
50
- continue
51
-
52
- print(f"Retrieving currency for gem '{library}'.")
53
- match = re.search(f"Installing ({library} [^\s]+)", logs)
54
- bundle_install_output += f"{match[1]}\n"
55
-
56
- return bundle_install_output
57
-
58
-
59
- def estimate_days_behind(release_date, last_supported_release_date):
60
- """Calculate days between release dates"""
61
- latest_date = datetime.strptime(release_date, "%Y-%m-%d")
62
- supported_date = datetime.strptime(last_supported_release_date, "%Y-%m-%d")
63
- days_diff = (latest_date - supported_date).days
64
- return max(0, days_diff)
65
-
66
-
67
- def get_upstream_version(dependency):
68
- """get the latest version available upstream and release date"""
69
- if dependency != "rails lts":
70
- try:
71
- response = get(f"{API_V1_ENDPOINT}{dependency}/latest.json")
72
- if not response:
73
- return "Unknown", "Unknown"
74
-
75
- response_json = response.json()
76
- latest_version = response_json["version"]
77
-
78
- gem_info_response = get(f"{GEM_INFO_ENDPOINT}{dependency}.json")
79
- if not gem_info_response:
80
- return latest_version, "Unknown"
81
- gem_info = gem_info_response.json()
82
-
83
- version_info_response = get(f"{API_V1_ENDPOINT}{dependency}.json")
84
- if not version_info_response:
85
- return latest_version, "Unknown"
86
- version_info = version_info_response.json()
87
-
88
- latest_version_release_date = None
89
- for version_data in version_info:
90
- if version_data["number"] == latest_version:
91
- if "created_at" in version_data:
92
- created_at = version_data["created_at"]
93
- latest_version_release_date = datetime.strptime(
94
- created_at, "%Y-%m-%dT%H:%M:%S.%fZ"
95
- ).strftime("%Y-%m-%d")
96
- break
97
-
98
- if not latest_version_release_date and "created_at" in gem_info:
99
- created_at = gem_info["created_at"]
100
- latest_version_release_date = datetime.strptime(
101
- created_at, "%Y-%m-%dT%H:%M:%S.%fZ"
102
- ).strftime("%Y-%m-%d")
103
-
104
- if not latest_version_release_date:
105
- latest_version_release_date = "Unknown"
106
- print(f"Could not find release date for {dependency}")
107
-
108
- return latest_version, latest_version_release_date
109
- except Exception as e:
110
- return "Unknown", "Unknown"
111
- else:
112
- try:
113
- initial_response = get(
114
- "https://makandracards.com/railslts/16137-installing-rails-lts/read"
115
- )
116
- if not initial_response:
117
- return "Unknown", "Unknown"
118
-
119
- initial_soup = BeautifulSoup(initial_response.text, "html.parser")
120
-
121
- text = initial_soup.find_all("li")[-1].text
122
- pattern = "(\d+\.\d+\.?\d*)"
123
- latest_version_match = re.search(pattern, text)
124
-
125
- latest_version = "Unknown"
126
- if latest_version_match:
127
- latest_version = latest_version_match[1]
128
- rails_lts_links = initial_soup.find_all("a", href=re.compile(r"railslts"))
129
- latest_rails_lts_link = None
130
- latest_version_num = 0.0
131
-
132
- for link in rails_lts_links:
133
- href = link.get("href", "")
134
- link_text = link.text.strip()
135
-
136
- if "Installing Rails" in link_text:
137
- version_match = re.search(r"Installing Rails (\d+\.\d+)", link_text)
138
- if version_match:
139
- version_str = version_match.group(1)
140
- try:
141
- version_num = float(version_str)
142
- if version_num > latest_version_num:
143
- latest_version_num = version_num
144
- latest_rails_lts_link = href
145
- latest_version = version_str
146
- except ValueError:
147
- pass
148
-
149
- latest_version_release_date = None
150
-
151
- if latest_rails_lts_link:
152
- if latest_rails_lts_link.startswith("/"):
153
- full_url = f"https://makandracards.com{latest_rails_lts_link}"
154
- else:
155
- full_url = latest_rails_lts_link
156
-
157
- detail_response = get(full_url)
158
- if detail_response:
159
- detail_soup = BeautifulSoup(detail_response.text, "html.parser")
160
-
161
- time_tags = detail_soup.find_all(
162
- "time", attrs={"data-relative": "true"}
163
- )
164
- for time_tag in time_tags:
165
- if "Updated" in time_tag.parent.text:
166
- if "datetime" in time_tag.attrs:
167
- datetime_str = time_tag["datetime"]
168
- try:
169
- date_obj = datetime.strptime(
170
- datetime_str, "%Y-%m-%dT%H:%M:%SZ"
171
- )
172
- latest_version_release_date = date_obj.strftime(
173
- "%Y-%m-%d"
174
- )
175
- break
176
- except ValueError:
177
- try:
178
- date_obj = datetime.strptime(
179
- datetime_str, "%Y-%m-%dT%H:%M:%S.%fZ"
180
- )
181
- latest_version_release_date = date_obj.strftime(
182
- "%Y-%m-%d"
183
- )
184
- break
185
- except ValueError as e:
186
- print(f"Error parsing datetime: {e}")
187
-
188
- if not latest_version_release_date:
189
- latest_version_release_date = datetime.now().strftime("%Y-%m-%d")
190
- return latest_version, latest_version_release_date
191
-
192
- except Exception as e:
193
- print(f"Error getting Rails LTS information: {str(e)}")
194
- return "Unknown", datetime.now().strftime("%Y-%m-%d")
195
-
196
-
197
- def get_version_release_date(dependency, version):
198
- if dependency == "rails lts":
199
- _, release_date = get_upstream_version(dependency)
200
- return release_date
201
-
202
- try:
203
- response = get(f"{API_V1_ENDPOINT}/{dependency}.json")
204
- if not response:
205
- print(f"Failed to get version info for {dependency}")
206
- return "Unknown"
207
-
208
- version_info = response.json()
209
- for version_data in version_info:
210
- if version_data["number"] == version and "created_at" in version_data:
211
- created_at = version_data["created_at"]
212
- release_date = datetime.strptime(
213
- created_at, "%Y-%m-%dT%H:%M:%S.%fZ"
214
- ).strftime("%Y-%m-%d")
215
- return release_date
216
- except Exception as e:
217
- print(f"Error getting release date for {dependency} {version}: {str(e)}")
218
-
219
- return "Unknown"
220
-
221
-
222
- def get_last_supported_version(bundle_install_output, dependency):
223
- """get up-to-date supported version"""
224
- pattern = r" ([^\s]+)"
225
-
226
- last_supported_version = re.search(
227
- dependency + pattern, bundle_install_output, flags=re.I | re.M
228
- )
229
-
230
- return last_supported_version[1]
231
-
232
-
233
- def isUptodate(last_supported_version, latest_version):
234
- if last_supported_version == latest_version:
235
- up_to_date = "Yes"
236
- else:
237
- up_to_date = "No"
238
-
239
- return up_to_date
240
-
241
-
242
- def main():
243
- # Read the JSON file
244
- with open(JSON_FILE) as file:
245
- data = load(file)
246
-
247
- bundle_install_output = get_bundle_install_output()
248
-
249
- items = data["table"]
250
-
251
- for item in items:
252
- package = item["Package name"]
253
- package = package.lower().replace("::", "-")
254
-
255
- latest_version, release_date = get_upstream_version(package)
256
- if package not in ["rails lts", "rails-api"]:
257
- last_supported_version = get_last_supported_version(
258
- bundle_install_output, package
259
- )
260
- else:
261
- last_supported_version = latest_version
262
-
263
- last_supported_version_release_date = get_version_release_date(
264
- package, last_supported_version
265
- )
266
-
267
- up_to_date = isUptodate(last_supported_version, latest_version)
268
-
269
- days_behind = "0 day/s"
270
- if (
271
- up_to_date == "No"
272
- and release_date != "Unknown"
273
- and last_supported_version_release_date != "Unknown"
274
- ):
275
- days = estimate_days_behind(
276
- release_date, last_supported_version_release_date
277
- )
278
- days_behind = f"{days} day/s"
279
-
280
- item.update(
281
- {
282
- "Last Supported Version": last_supported_version,
283
- "Latest version": latest_version,
284
- "Up-to-date": up_to_date,
285
- "Release date": release_date,
286
- "Latest Version Published At": last_supported_version_release_date,
287
- "Days behind": days_behind,
288
- },
289
- )
290
- # Create a DataFrame from the list of dictionaries
291
- df = DataFrame(items)
292
- df.insert(len(df.columns) - 1, "Cloud Native", df.pop("Cloud Native"))
293
-
294
- # Convert dataframe to markdown
295
- markdown_table = df.to_markdown(index=False)
296
-
297
- disclaimer = "##### This page is auto-generated. Any change will be overwritten after the next sync. Please apply changes directly to the files in the [ruby tracer](https://github.com/instana/ruby-sensor) repo."
298
- title = "## Ruby supported packages and versions"
299
-
300
- # Combine disclaimer, title, and markdown table with line breaks
301
- final_markdown = disclaimer + "\n" + title + "\n" + markdown_table
302
-
303
- with open(REPORT_FILE, "w") as file:
304
- file.write(final_markdown)
305
-
306
-
307
- if __name__ == "__main__":
308
- main()