Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
27476997
Commit
27476997
authored
Jul 26, 2016
by
Ahmad Sherif
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use fewer queries for CI charts
parent
f4804d5b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
70 additions
and
26 deletions
+70
-26
lib/ci/charts.rb
lib/ci/charts.rb
+70
-26
No files found.
lib/ci/charts.rb
View file @
27476997
module
Ci
module
Charts
module
DailyInterval
def
grouped_count
(
query
)
query
.
group
(
"DATE(
#{
Ci
::
Build
.
table_name
}
.created_at)"
).
count
(
:created_at
).
transform_keys
{
|
date
|
date
.
strftime
(
@format
)
}
end
def
interval_step
@interval_step
||=
1
.
day
end
end
module
MonthlyInterval
def
grouped_count
(
query
)
if
Gitlab
::
Database
.
postgresql?
query
.
group
(
"to_char(
#{
Ci
::
Build
.
table_name
}
.created_at, '01 Month YYYY')"
).
count
(
:created_at
).
transform_keys
(
&
:squish
)
else
query
.
group
(
"DATE_FORMAT(
#{
Ci
::
Build
.
table_name
}
.created_at, '01 %M %Y')"
).
count
(
:created_at
)
end
end
def
interval_step
@interval_step
||=
1
.
month
end
end
class
Chart
attr_reader
:labels
,
:total
,
:success
,
:project
,
:build_times
...
...
@@ -13,47 +45,59 @@ module Ci
collect
end
def
push
(
from
,
to
,
format
)
@labels
<<
from
.
strftime
(
format
)
@total
<<
project
.
builds
.
where
(
"? >
#{
Ci
::
Build
.
table_name
}
.created_at AND
#{
Ci
::
Build
.
table_name
}
.created_at > ?"
,
to
,
from
).
count
(
:all
)
@success
<<
project
.
builds
.
where
(
"? >
#{
Ci
::
Build
.
table_name
}
.created_at AND
#{
Ci
::
Build
.
table_name
}
.created_at > ?"
,
to
,
from
).
success
.
count
(
:all
)
def
collect
query
=
project
.
builds
.
where
(
"? >
#{
Ci
::
Build
.
table_name
}
.created_at AND
#{
Ci
::
Build
.
table_name
}
.created_at > ?"
,
@to
,
@from
)
totals_count
=
grouped_count
(
query
)
success_count
=
grouped_count
(
query
.
success
)
current
=
@from
while
current
<
@to
label
=
current
.
strftime
(
@format
)
@labels
<<
label
@total
<<
(
totals_count
[
label
]
||
0
)
@success
<<
(
success_count
[
label
]
||
0
)
current
+=
interval_step
end
end
end
class
YearChart
<
Chart
def
collect
13
.
times
do
|
i
|
start_month
=
(
Date
.
today
.
years_ago
(
1
)
+
i
.
month
).
beginning_of_month
end_month
=
start_month
.
end_of_month
include
MonthlyInterval
push
(
start_month
,
end_month
,
"%d %B %Y"
)
end
def
initialize
(
*
)
@to
=
Date
.
today
.
end_of_month
@from
=
@to
.
years_ago
(
1
).
beginning_of_month
@format
=
'%d %B %Y'
super
end
end
class
MonthChart
<
Chart
def
collect
30
.
times
do
|
i
|
start_day
=
Date
.
today
-
30
.
days
+
i
.
days
end_day
=
Date
.
today
-
30
.
days
+
i
.
day
+
1
.
day
include
DailyInterval
push
(
start_day
,
end_day
,
"%d %B"
)
end
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
30
.
days
@format
=
'%d %B'
super
end
end
class
WeekChart
<
Chart
def
collect
7
.
times
do
|
i
|
start_day
=
Date
.
today
-
7
.
days
+
i
.
days
end_day
=
Date
.
today
-
7
.
days
+
i
.
day
+
1
.
day
include
DailyInterval
push
(
start_day
,
end_day
,
"%d %B"
)
end
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
7
.
days
@format
=
'%d %B'
super
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