stack-service-base 0.0.1
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.
- checksums.yaml +7 -0
- data/lib/stack-service-base/prometheus.rb +7 -0
- data/lib/stack-service-base/prometheus_parser.rb +93 -0
- data/lib/stack-service-base.rb +1 -0
- data/lib/version.rb +5 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 95b61165ddad06a10203d8b2633ec338ea353bb0f238773aa11a991a2cbf091d
|
4
|
+
data.tar.gz: c9935564be644e842e6edf1224c45306d15d1b070caa8c6152c8f47bf1174f1b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1a1a331da52f907d83f9a977e433615908f4ab99bdb95fb28dd471529c288501e2b770a238b38357eaa3645fe142814ea43c5340a7b65b42f47ee30d7c32484a
|
7
|
+
data.tar.gz: 27ffac7b6ce58cff790427bc17ce1ace656c8f76b585686a7113b6cf1bf397d191771f595f7a1dc72e764a45692200c19010133a528eb1ea12829b995f798e00
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module PrometheusParser
|
2
|
+
def self.parse_metrics(text)
|
3
|
+
metrics = Hash.new { |h, k| h[k] = { series: [] } }
|
4
|
+
|
5
|
+
series = ->(name, labels) do
|
6
|
+
metrics[name][:series].find { _1[:labels] == labels } ||
|
7
|
+
metrics[name][:series] << { labels: labels } and metrics[name][:series].last
|
8
|
+
end
|
9
|
+
|
10
|
+
text.each_line(chomp: true) do |l|
|
11
|
+
case l
|
12
|
+
when /\A#\s*HELP\s+(\S+)\s+(.+)/
|
13
|
+
metrics[$1.to_sym][:help] = $2
|
14
|
+
when /\A#\s*TYPE\s+(\S+)\s+(\S+)/
|
15
|
+
metrics[$1.to_sym][:type] = $2.to_sym
|
16
|
+
when /\A([^ {]+)(?:\{([^}]*)\})?\s+([0-9eE+\-\.]+)\z/
|
17
|
+
name, lbls, val = $1.to_sym, $2, $3.to_f
|
18
|
+
labels = lbls.to_s.split(',').to_h { |kv| k, v = kv.split('='); [k.to_sym, v.delete('"')] }
|
19
|
+
|
20
|
+
case
|
21
|
+
when name.to_s.end_with?('_bucket')
|
22
|
+
base = name.to_s.sub(/_bucket\z/, '').to_sym
|
23
|
+
le = labels.delete(:le)
|
24
|
+
(entry = series[base, labels])[:buckets] ||= {}
|
25
|
+
entry[:buckets][le] = val
|
26
|
+
when name.to_s =~ /(.*)_(sum|count)\z/
|
27
|
+
base, field = Regexp.last_match(1).to_sym, Regexp.last_match(2).to_sym
|
28
|
+
(series[base, labels])[field] = val
|
29
|
+
when labels.key?(:quantile) # Summary quantile
|
30
|
+
q = labels.delete(:quantile)
|
31
|
+
(entry = series[name, labels])[:quantiles] ||= {}
|
32
|
+
entry[:quantiles][q] = val
|
33
|
+
else # Counter/Gauge sample
|
34
|
+
metrics[name][:series] << { labels: labels, value: val }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
metrics
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
metrics_text = <<~METRICS
|
44
|
+
# TYPE http_server_requests_total counter
|
45
|
+
# HELP http_server_requests_total The total number of HTTP requests handled by the Rack application.
|
46
|
+
http_server_requests_total{code="200",method="get",path="/"} 5.0
|
47
|
+
http_server_requests_total{code="200",method="get",path="/metrics"} 18.0
|
48
|
+
# TYPE http_server_request_duration_seconds histogram
|
49
|
+
# HELP http_server_request_duration_seconds The HTTP response duration of the Rack application.
|
50
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.005"} 0.0
|
51
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.01"} 0.0
|
52
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.025"} 0.0
|
53
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.05"} 4.0
|
54
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.1"} 5.0
|
55
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.25"} 5.0
|
56
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="0.5"} 5.0
|
57
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="1"} 5.0
|
58
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="2.5"} 5.0
|
59
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="5"} 5.0
|
60
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="10"} 5.0
|
61
|
+
http_server_request_duration_seconds_bucket{method="get",path="/",le="+Inf"} 5.0
|
62
|
+
http_server_request_duration_seconds_sum{method="get",path="/"} 0.1885649065952748
|
63
|
+
http_server_request_duration_seconds_count{method="get",path="/"} 5.0
|
64
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.005"} 18.0
|
65
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.01"} 18.0
|
66
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.025"} 18.0
|
67
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.05"} 18.0
|
68
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.1"} 18.0
|
69
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.25"} 18.0
|
70
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="0.5"} 18.0
|
71
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="1"} 18.0
|
72
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="2.5"} 18.0
|
73
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="5"} 18.0
|
74
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="10"} 18.0
|
75
|
+
http_server_request_duration_seconds_bucket{method="get",path="/metrics",le="+Inf"} 18.0
|
76
|
+
http_server_request_duration_seconds_sum{method="get",path="/metrics"} 0.012181486235931516
|
77
|
+
http_server_request_duration_seconds_count{method="get",path="/metrics"} 18.0
|
78
|
+
# TYPE http_server_exceptions_total counter
|
79
|
+
# HELP http_server_exceptions_total The total number of exceptions raised by the Rack application.
|
80
|
+
METRICS
|
81
|
+
|
82
|
+
metrics = PrometheusParser::parse_metrics metrics_text
|
83
|
+
|
84
|
+
# Print the parsed metrics
|
85
|
+
metrics.each do |name, data|
|
86
|
+
puts "Metric: #{name}"
|
87
|
+
puts "Description: #{data[:help]}"
|
88
|
+
puts "Type: #{data[:type]}"
|
89
|
+
data[:series].each do |series|
|
90
|
+
puts " #{series} "
|
91
|
+
end
|
92
|
+
puts
|
93
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'service-base/prometheus'
|
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stack-service-base
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ''
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-05-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: prometheus-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/stack-service-base.rb
|
34
|
+
- lib/stack-service-base/prometheus.rb
|
35
|
+
- lib/stack-service-base/prometheus_parser.rb
|
36
|
+
- lib/version.rb
|
37
|
+
homepage:
|
38
|
+
licenses: []
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.3.1
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubygems_version: 3.5.10
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: Common files
|
59
|
+
test_files: []
|