BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gitlab-ce
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
gitlab-ce
Commits
940b27ec
Commit
940b27ec
authored
Apr 08, 2016
by
Yorick Peterse
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'metrics-timestamp-precision' into 'master'
Use more accurate timestamps for InfluxDB. See merge request !3617
parents
fb02c967
aa7cddc4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
1 deletion
+21
-1
metric.rb
lib/gitlab/metrics/metric.rb
+21
-1
No files found.
lib/gitlab/metrics/metric.rb
View file @
940b27ec
...
...
@@ -2,6 +2,8 @@ module Gitlab
module
Metrics
# Class for storing details of a single metric (label, value, etc).
class
Metric
JITTER_RANGE
=
0.000001
..
0.001
attr_reader
:series
,
:values
,
:tags
,
:created_at
# series - The name of the series (as a String) to store the metric in.
...
...
@@ -16,11 +18,29 @@ module Gitlab
# Returns a Hash in a format that can be directly written to InfluxDB.
def
to_hash
# InfluxDB overwrites an existing point if a new point has the same
# series, tag set, and timestamp. In a highly concurrent environment
# this means that using the number of seconds since the Unix epoch is
# inevitably going to collide with another timestamp. For example, two
# Rails requests processed by different processes may end up generating
# metrics using the _exact_ same timestamp (in seconds).
#
# Due to the way InfluxDB is set up there's no solution to this problem,
# all we can do is lower the amount of collisions. We do this by using
# Time#to_f which returns the seconds as a Float providing greater
# accuracy. We then add a small random value that is large enough to
# distinguish most timestamps but small enough to not alter the amount
# of seconds.
#
# See https://gitlab.com/gitlab-com/operations/issues/175 for more
# information.
time
=
@created_at
.
to_f
+
rand
(
JITTER_RANGE
)
{
series:
@series
,
tags:
@tags
,
values:
@values
,
timestamp:
@created_at
.
to_i
*
1_000_000_000
timestamp:
(
time
*
1_000_000_000
).
to_i
}
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment