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
Léo-Paul Géneau
gitlab-ce
Commits
f364cc34
Commit
f364cc34
authored
Sep 06, 2017
by
Maxim Rydkin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move `lib/ci/charts.rb` into `lib/gitlab/ci/charts.rb`
parent
060fc390
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
124 additions
and
122 deletions
+124
-122
app/controllers/projects/pipelines_controller.rb
app/controllers/projects/pipelines_controller.rb
+4
-4
lib/ci/charts.rb
lib/ci/charts.rb
+0
-116
lib/gitlab/ci/charts.rb
lib/gitlab/ci/charts.rb
+118
-0
spec/lib/gitlab/ci/charts_spec.rb
spec/lib/gitlab/ci/charts_spec.rb
+2
-2
No files found.
app/controllers/projects/pipelines_controller.rb
View file @
f364cc34
...
@@ -132,10 +132,10 @@ class Projects::PipelinesController < Projects::ApplicationController
...
@@ -132,10 +132,10 @@ class Projects::PipelinesController < Projects::ApplicationController
def
charts
def
charts
@charts
=
{}
@charts
=
{}
@charts
[
:week
]
=
Ci
::
Charts
::
WeekChart
.
new
(
project
)
@charts
[
:week
]
=
Gitlab
::
Ci
::
Charts
::
WeekChart
.
new
(
project
)
@charts
[
:month
]
=
Ci
::
Charts
::
MonthChart
.
new
(
project
)
@charts
[
:month
]
=
Gitlab
::
Ci
::
Charts
::
MonthChart
.
new
(
project
)
@charts
[
:year
]
=
Ci
::
Charts
::
YearChart
.
new
(
project
)
@charts
[
:year
]
=
Gitlab
::
Ci
::
Charts
::
YearChart
.
new
(
project
)
@charts
[
:pipeline_times
]
=
Ci
::
Charts
::
PipelineTime
.
new
(
project
)
@charts
[
:pipeline_times
]
=
Gitlab
::
Ci
::
Charts
::
PipelineTime
.
new
(
project
)
@counts
=
{}
@counts
=
{}
@counts
[
:total
]
=
@project
.
pipelines
.
count
(
:all
)
@counts
[
:total
]
=
@project
.
pipelines
.
count
(
:all
)
...
...
lib/ci/charts.rb
deleted
100644 → 0
View file @
060fc390
module
Ci
module
Charts
module
DailyInterval
def
grouped_count
(
query
)
query
.
group
(
"DATE(
#{
Ci
::
Pipeline
.
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
::
Pipeline
.
table_name
}
.created_at, '01 Month YYYY')"
)
.
count
(
:created_at
)
.
transform_keys
(
&
:squish
)
else
query
.
group
(
"DATE_FORMAT(
#{
Ci
::
Pipeline
.
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
,
:pipeline_times
def
initialize
(
project
)
@labels
=
[]
@total
=
[]
@success
=
[]
@pipeline_times
=
[]
@project
=
project
collect
end
def
collect
query
=
project
.
pipelines
.
where
(
"? >
#{
Ci
::
Pipeline
.
table_name
}
.created_at AND
#{
Ci
::
Pipeline
.
table_name
}
.created_at > ?"
,
@to
,
@from
)
# rubocop:disable GitlabSecurity/SqlInjection
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
include
MonthlyInterval
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
include
DailyInterval
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
30
.
days
@format
=
'%d %B'
super
end
end
class
WeekChart
<
Chart
include
DailyInterval
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
7
.
days
@format
=
'%d %B'
super
end
end
class
PipelineTime
<
Chart
def
collect
commits
=
project
.
pipelines
.
last
(
30
)
commits
.
each
do
|
commit
|
@labels
<<
commit
.
short_sha
duration
=
commit
.
duration
||
0
@pipeline_times
<<
(
duration
/
60
)
end
end
end
end
end
lib/gitlab/ci/charts.rb
0 → 100644
View file @
f364cc34
module
Gitlab
module
Ci
module
Charts
module
DailyInterval
def
grouped_count
(
query
)
query
.
group
(
"DATE(
#{
Ci
::
Pipeline
.
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
::
Pipeline
.
table_name
}
.created_at, '01 Month YYYY')"
)
.
count
(
:created_at
)
.
transform_keys
(
&
:squish
)
else
query
.
group
(
"DATE_FORMAT(
#{
Ci
::
Pipeline
.
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
,
:pipeline_times
def
initialize
(
project
)
@labels
=
[]
@total
=
[]
@success
=
[]
@pipeline_times
=
[]
@project
=
project
collect
end
def
collect
query
=
project
.
pipelines
.
where
(
"? >
#{
Ci
::
Pipeline
.
table_name
}
.created_at AND
#{
Ci
::
Pipeline
.
table_name
}
.created_at > ?"
,
@to
,
@from
)
# rubocop:disable GitlabSecurity/SqlInjection
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
include
MonthlyInterval
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
include
DailyInterval
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
30
.
days
@format
=
'%d %B'
super
end
end
class
WeekChart
<
Chart
include
DailyInterval
def
initialize
(
*
)
@to
=
Date
.
today
@from
=
@to
-
7
.
days
@format
=
'%d %B'
super
end
end
class
PipelineTime
<
Chart
def
collect
commits
=
project
.
pipelines
.
last
(
30
)
commits
.
each
do
|
commit
|
@labels
<<
commit
.
short_sha
duration
=
commit
.
duration
||
0
@pipeline_times
<<
(
duration
/
60
)
end
end
end
end
end
end
spec/lib/ci/charts_spec.rb
→
spec/lib/
gitlab/
ci/charts_spec.rb
View file @
f364cc34
require
'spec_helper'
require
'spec_helper'
describe
Ci
::
Charts
do
describe
Gitlab
::
Ci
::
Charts
do
context
"pipeline_times"
do
context
"pipeline_times"
do
let
(
:project
)
{
create
(
:project
)
}
let
(
:project
)
{
create
(
:project
)
}
let
(
:chart
)
{
Ci
::
Charts
::
PipelineTime
.
new
(
project
)
}
let
(
:chart
)
{
Gitlab
::
Ci
::
Charts
::
PipelineTime
.
new
(
project
)
}
subject
{
chart
.
pipeline_times
}
subject
{
chart
.
pipeline_times
}
...
...
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