instana 2.0.0 → 2.2.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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/lib/instana/instrumentation/instrumented_request.rb +2 -0
  3. data/lib/instana/instrumentation/net-http.rb +2 -1
  4. data/lib/instana/instrumentation/rack.rb +86 -66
  5. data/lib/instana/setup.rb +1 -0
  6. data/lib/instana/span_filtering/condition.rb +134 -0
  7. data/lib/instana/span_filtering/configuration.rb +262 -0
  8. data/lib/instana/span_filtering/filter_rule.rb +31 -0
  9. data/lib/instana/span_filtering.rb +62 -0
  10. data/lib/instana/trace/span.rb +5 -3
  11. data/lib/instana/trace/span_context.rb +10 -2
  12. data/lib/instana/trace/tracer.rb +0 -21
  13. data/lib/instana/util.rb +13 -0
  14. data/lib/instana/version.rb +1 -1
  15. metadata +7 -258
  16. data/.circleci/config.yml +0 -361
  17. data/.codeclimate.yml +0 -23
  18. data/.editorconfig +0 -10
  19. data/.fasterer.yml +0 -23
  20. data/.github/ISSUE_TEMPLATE/bug.yml +0 -39
  21. data/.github/ISSUE_TEMPLATE/config.yml +0 -8
  22. data/.github/workflows/pr_commits_signed_off.yml +0 -16
  23. data/.github/workflows/release-notification-on-slack.yml +0 -34
  24. data/.gitignore +0 -19
  25. data/.rubocop.yml +0 -34
  26. data/.rubocop_todo.yml +0 -1140
  27. data/.tekton/.currency/docs/report.md +0 -20
  28. data/.tekton/.currency/resources/requirements.txt +0 -4
  29. data/.tekton/.currency/resources/table.json +0 -100
  30. data/.tekton/.currency/scripts/generate_report.py +0 -308
  31. data/.tekton/README.md +0 -278
  32. data/.tekton/github-interceptor-secret.yaml +0 -8
  33. data/.tekton/github-pr-eventlistener.yaml +0 -104
  34. data/.tekton/github-pr-pipeline.yaml.part +0 -38
  35. data/.tekton/github-set-status-task.yaml +0 -43
  36. data/.tekton/github-webhook-ingress.yaml +0 -20
  37. data/.tekton/pipeline.yaml +0 -484
  38. data/.tekton/pipelinerun.yaml +0 -21
  39. data/.tekton/prepuller-restart-service-account.yaml +0 -31
  40. data/.tekton/ruby-tracer-prepuller-cronjob.yaml +0 -20
  41. data/.tekton/ruby-tracer-prepuller.yaml +0 -88
  42. data/.tekton/run_unittests.sh +0 -87
  43. data/.tekton/scheduled-eventlistener.yaml +0 -108
  44. data/.tekton/task.yaml +0 -453
  45. data/.tekton/tekton-triggers-eventlistener-serviceaccount.yaml +0 -29
  46. data/Appraisals +0 -124
  47. data/CONTRIBUTING.md +0 -86
  48. data/Gemfile +0 -22
  49. data/LICENSE +0 -22
  50. data/MAINTAINERS.md +0 -3
  51. data/Rakefile +0 -49
  52. data/bin/announce_release_on_slack.py +0 -103
  53. data/docker-compose.yml +0 -20
  54. data/download.sh +0 -85
  55. data/examples/otel.rb +0 -98
  56. data/examples/tracing.rb +0 -85
  57. data/extras/license_header.rb +0 -44
  58. data/gemfiles/.bundle/config +0 -2
  59. data/gemfiles/aws_30.gemfile +0 -21
  60. data/gemfiles/aws_60.gemfile +0 -16
  61. data/gemfiles/cuba_30.gemfile +0 -16
  62. data/gemfiles/cuba_40.gemfile +0 -13
  63. data/gemfiles/dalli_20.gemfile +0 -15
  64. data/gemfiles/dalli_30.gemfile +0 -12
  65. data/gemfiles/dalli_32.gemfile +0 -12
  66. data/gemfiles/excon_0100.gemfile +0 -14
  67. data/gemfiles/excon_021.gemfile +0 -17
  68. data/gemfiles/excon_079.gemfile +0 -17
  69. data/gemfiles/excon_100.gemfile +0 -14
  70. data/gemfiles/graphql_10.gemfile +0 -16
  71. data/gemfiles/graphql_20.gemfile +0 -15
  72. data/gemfiles/grpc_10.gemfile +0 -15
  73. data/gemfiles/mongo_216.gemfile +0 -15
  74. data/gemfiles/mongo_219.gemfile +0 -12
  75. data/gemfiles/net_http_01.gemfile +0 -17
  76. data/gemfiles/rack_16.gemfile +0 -15
  77. data/gemfiles/rack_20.gemfile +0 -15
  78. data/gemfiles/rack_30.gemfile +0 -13
  79. data/gemfiles/rails_42.gemfile +0 -18
  80. data/gemfiles/rails_50.gemfile +0 -19
  81. data/gemfiles/rails_52.gemfile +0 -19
  82. data/gemfiles/rails_60.gemfile +0 -19
  83. data/gemfiles/rails_61.gemfile +0 -21
  84. data/gemfiles/rails_70.gemfile +0 -18
  85. data/gemfiles/rails_71.gemfile +0 -17
  86. data/gemfiles/rails_80.gemfile +0 -17
  87. data/gemfiles/redis_40.gemfile +0 -15
  88. data/gemfiles/redis_50.gemfile +0 -13
  89. data/gemfiles/redis_51.gemfile +0 -13
  90. data/gemfiles/resque_122.gemfile +0 -16
  91. data/gemfiles/resque_1274_3scale.gemfile +0 -17
  92. data/gemfiles/resque_20.gemfile +0 -16
  93. data/gemfiles/rest_client_16.gemfile +0 -17
  94. data/gemfiles/rest_client_20.gemfile +0 -17
  95. data/gemfiles/roda_20.gemfile +0 -16
  96. data/gemfiles/roda_30.gemfile +0 -16
  97. data/gemfiles/rubocop_162.gemfile +0 -6
  98. data/gemfiles/sequel_56.gemfile +0 -16
  99. data/gemfiles/sequel_57.gemfile +0 -16
  100. data/gemfiles/sequel_58.gemfile +0 -16
  101. data/gemfiles/shoryuken_50.gemfile +0 -16
  102. data/gemfiles/shoryuken_60.gemfile +0 -13
  103. data/gemfiles/sidekiq_42.gemfile +0 -15
  104. data/gemfiles/sidekiq_50.gemfile +0 -15
  105. data/gemfiles/sidekiq_60.gemfile +0 -12
  106. data/gemfiles/sidekiq_65.gemfile +0 -12
  107. data/gemfiles/sidekiq_70.gemfile +0 -12
  108. data/gemfiles/sinatra_14.gemfile +0 -15
  109. data/gemfiles/sinatra_22.gemfile +0 -12
  110. data/gemfiles/sinatra_30.gemfile +0 -12
  111. data/gemfiles/sinatra_40.gemfile +0 -12
  112. data/instana.gemspec +0 -53
  113. data/log/.keep +0 -0
  114. data/sonar-project.properties +0 -9
  115. data/test/activator_test.rb +0 -50
  116. data/test/backend/agent_test.rb +0 -80
  117. data/test/backend/gc_snapshot_test.rb +0 -11
  118. data/test/backend/host_agent_activation_observer_test.rb +0 -73
  119. data/test/backend/host_agent_lookup_test.rb +0 -78
  120. data/test/backend/host_agent_reporting_observer_test.rb +0 -276
  121. data/test/backend/host_agent_test.rb +0 -89
  122. data/test/backend/process_info_test.rb +0 -83
  123. data/test/backend/request_client_test.rb +0 -39
  124. data/test/backend/serverless_agent_test.rb +0 -83
  125. data/test/benchmarks/bench_id_generation.rb +0 -15
  126. data/test/benchmarks/bench_opentracing.rb +0 -16
  127. data/test/config_test.rb +0 -34
  128. data/test/frameworks/cuba_test.rb +0 -61
  129. data/test/frameworks/roda_test.rb +0 -60
  130. data/test/frameworks/sinatra_test.rb +0 -71
  131. data/test/instana_test.rb +0 -37
  132. data/test/instrumentation/aws_test.rb +0 -241
  133. data/test/instrumentation/dalli_test.rb +0 -325
  134. data/test/instrumentation/excon_test.rb +0 -204
  135. data/test/instrumentation/graphql_test.rb +0 -289
  136. data/test/instrumentation/grpc_test.rb +0 -420
  137. data/test/instrumentation/mongo_test.rb +0 -68
  138. data/test/instrumentation/net_http_test.rb +0 -220
  139. data/test/instrumentation/rack_instrumented_request_test.rb +0 -211
  140. data/test/instrumentation/rack_test.rb +0 -415
  141. data/test/instrumentation/rails_action_cable_test.rb +0 -135
  142. data/test/instrumentation/rails_action_controller_test.rb +0 -218
  143. data/test/instrumentation/rails_action_mailer_test.rb +0 -66
  144. data/test/instrumentation/rails_action_view_test.rb +0 -154
  145. data/test/instrumentation/rails_active_job_test.rb +0 -65
  146. data/test/instrumentation/rails_active_record_database_missing_test.rb +0 -44
  147. data/test/instrumentation/rails_active_record_test.rb +0 -116
  148. data/test/instrumentation/redis_test.rb +0 -152
  149. data/test/instrumentation/resque_test.rb +0 -188
  150. data/test/instrumentation/rest_client_test.rb +0 -106
  151. data/test/instrumentation/sequel_test.rb +0 -111
  152. data/test/instrumentation/shoryuken_test.rb +0 -47
  153. data/test/instrumentation/sidekiq-client_test.rb +0 -169
  154. data/test/instrumentation/sidekiq-worker_test.rb +0 -180
  155. data/test/secrets_test.rb +0 -112
  156. data/test/serverless_test.rb +0 -369
  157. data/test/snapshot/deltable_test.rb +0 -17
  158. data/test/snapshot/docker_container_test.rb +0 -82
  159. data/test/snapshot/fargate_container_test.rb +0 -82
  160. data/test/snapshot/fargate_process_test.rb +0 -35
  161. data/test/snapshot/fargate_task_test.rb +0 -49
  162. data/test/snapshot/google_cloud_run_instance_test.rb +0 -74
  163. data/test/snapshot/google_cloud_run_process_test.rb +0 -33
  164. data/test/snapshot/lambda_function_test.rb +0 -37
  165. data/test/snapshot/ruby_process_test.rb +0 -32
  166. data/test/support/apps/active_record/active_record.rb +0 -24
  167. data/test/support/apps/grpc/boot.rb +0 -23
  168. data/test/support/apps/grpc/grpc_server.rb +0 -84
  169. data/test/support/apps/http_endpoint/boot.rb +0 -28
  170. data/test/support/apps/rails/boot.rb +0 -219
  171. data/test/support/apps/rails/models/block.rb +0 -21
  172. data/test/support/apps/rails/models/block6.rb +0 -21
  173. data/test/support/apps/resque/boot.rb +0 -5
  174. data/test/support/apps/resque/jobs/resque_error_job.rb +0 -22
  175. data/test/support/apps/resque/jobs/resque_fast_job.rb +0 -23
  176. data/test/support/apps/sidekiq/boot.rb +0 -25
  177. data/test/support/apps/sidekiq/jobs/sidekiq_job_1.rb +0 -9
  178. data/test/support/apps/sidekiq/jobs/sidekiq_job_2.rb +0 -10
  179. data/test/support/apps/sidekiq/worker.rb +0 -37
  180. data/test/support/helpers.rb +0 -85
  181. data/test/support/mock_timer.rb +0 -20
  182. data/test/test_helper.rb +0 -69
  183. data/test/trace/custom_test.rb +0 -233
  184. data/test/trace/id_management_test.rb +0 -78
  185. data/test/trace/instrumented_logger_test.rb +0 -39
  186. data/test/trace/processor_test.rb +0 -58
  187. data/test/trace/span_context_test.rb +0 -22
  188. data/test/trace/span_test.rb +0 -179
  189. data/test/trace/tracer_async_test.rb +0 -243
  190. data/test/trace/tracer_provider_test.rb +0 -148
  191. data/test/trace/tracer_test.rb +0 -363
  192. 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()