Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
d5b673da
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d5b673da
编写于
11月 17, 2016
作者:
J
James Lopez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more refactoring and added some auth checks
上级
9c995725
变更
14
展开全部
隐藏空白更改
内联
并排
Showing
14 changed file
with
670 addition
and
813 deletion
+670
-813
app/controllers/projects/cycle_analytics/events_controller.rb
...controllers/projects/cycle_analytics/events_controller.rb
+1
-1
db/schema.rb
db/schema.rb
+507
-687
lib/gitlab/cycle_analytics/base_event.rb
lib/gitlab/cycle_analytics/base_event.rb
+23
-13
lib/gitlab/cycle_analytics/code_event.rb
lib/gitlab/cycle_analytics/code_event.rb
+20
-13
lib/gitlab/cycle_analytics/event_config.rb
lib/gitlab/cycle_analytics/event_config.rb
+0
-16
lib/gitlab/cycle_analytics/events.rb
lib/gitlab/cycle_analytics/events.rb
+8
-8
lib/gitlab/cycle_analytics/events_query.rb
lib/gitlab/cycle_analytics/events_query.rb
+1
-1
lib/gitlab/cycle_analytics/issue_event.rb
lib/gitlab/cycle_analytics/issue_event.rb
+19
-11
lib/gitlab/cycle_analytics/plan_event.rb
lib/gitlab/cycle_analytics/plan_event.rb
+27
-27
lib/gitlab/cycle_analytics/production_event.rb
lib/gitlab/cycle_analytics/production_event.rb
+18
-10
lib/gitlab/cycle_analytics/review_event.rb
lib/gitlab/cycle_analytics/review_event.rb
+19
-11
lib/gitlab/cycle_analytics/staging_event.rb
lib/gitlab/cycle_analytics/staging_event.rb
+13
-7
lib/gitlab/cycle_analytics/test_event.rb
lib/gitlab/cycle_analytics/test_event.rb
+13
-7
spec/lib/gitlab/cycle_analytics/events_spec.rb
spec/lib/gitlab/cycle_analytics/events_spec.rb
+1
-1
未找到文件。
app/controllers/projects/cycle_analytics/events_controller.rb
浏览文件 @
d5b673da
...
...
@@ -50,7 +50,7 @@ module Projects
end
def
options
@options
||=
{
from:
start_date
(
events_params
)
}
@options
||=
{
from:
start_date
(
events_params
)
,
current_user:
current_user
}
end
def
events_params
...
...
db/schema.rb
浏览文件 @
d5b673da
此差异已折叠。
点击以展开。
lib/gitlab/cycle_analytics/base_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
BaseEvent
extend
MetricsTables
include
MetricsTables
class
<<
self
attr_reader
:stage
,
:start_time_attrs
,
:end_time_attrs
,
:projections
attr_reader
:stage
,
:start_time_attrs
,
:end_time_attrs
,
:projections
,
:query
def
order
@order
||
@start_time_attrs
def
initialize
(
project
:,
options
:)
@query
=
EventsQuery
.
new
(
project:
project
,
options:
options
)
@project
=
project
@options
=
options
end
def
fetch
@query
.
execute
(
self
).
map
do
|
event
|
serialize
(
event
)
if
has_permission?
(
event
[
'id'
])
end
end
def
query
(
_base_query
);
end
def
custom_
query
(
_base_query
);
end
def
fetch
(
query
)
query
.
execute
(
self
).
map
{
|
event
|
serialize
(
event
,
query
)
}
end
def
order
@order
||
@start_time_attrs
end
private
private
def
serialize
(
_event
,
_query
)
raise
NotImplementedError
.
new
(
"Expected
#{
self
.
name
}
to implement serialize(event, query)"
)
end
def
serialize
(
_event
)
raise
NotImplementedError
.
new
(
"Expected
#{
self
.
name
}
to implement serialize(event)"
)
end
def
has_permission?
(
_id
)
true
end
end
end
...
...
lib/gitlab/cycle_analytics/code_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
CodeEvent
<
BaseEvent
@stage
=
:code
@start_time_attrs
=
issue_metrics_table
[
:first_mentioned_in_commit_at
]
def
initialize
(
*
args
)
@stage
=
:code
@start_time_attrs
=
issue_metrics_table
[
:first_mentioned_in_commit_at
]
@end_time_attrs
=
mr_table
[
:created_at
]
@projections
=
[
mr_table
[
:title
],
mr_table
[
:iid
],
mr_table
[
:id
],
mr_table
[
:created_at
],
mr_table
[
:state
],
mr_table
[
:author_id
]]
@order
=
mr_table
[
:created_at
]
@end_time_attrs
=
mr_table
[
:created_at
]
@projections
=
[
mr_table
[
:title
],
mr_table
[
:iid
],
mr_table
[
:id
],
mr_table
[
:created_at
],
mr_table
[
:state
],
mr_table
[
:author_id
]]
super
(
*
args
)
end
@order
=
mr_table
[
:created_at
]
private
def
se
lf
.
serialize
(
event
,
query
)
def
se
rialize
(
event
)
event
[
'author'
]
=
User
.
find
(
event
.
delete
(
'author_id'
))
AnalyticsMergeRequestSerializer
.
new
(
project:
query
.
project
).
represent
(
event
).
as_json
AnalyticsMergeRequestSerializer
.
new
(
project:
@project
).
represent
(
event
).
as_json
end
def
has_permission?
(
id
)
@options
[
:current_user
].
can?
(
:read_merge_request
,
MergeRequest
.
find
(
id
))
end
end
end
...
...
lib/gitlab/cycle_analytics/event_config.rb
已删除
100644 → 0
浏览文件 @
9c995725
module
Gitlab
module
CycleAnalytics
class
TestEvent
<
BaseEvent
@start_time_attrs
=
mr_table
[
:created_at
]
@end_time_attrs
=
mr_metrics_table
[
:merged_at
]
@projections
=
[
mr_table
[
:title
],
mr_table
[
:iid
],
mr_table
[
:id
],
mr_table
[
:created_at
],
mr_table
[
:state
],
mr_table
[
:author_id
]]
end
end
end
lib/gitlab/cycle_analytics/events.rb
浏览文件 @
d5b673da
...
...
@@ -3,35 +3,35 @@ module Gitlab
class
Events
def
initialize
(
project
:,
options
:)
@project
=
project
@
query
=
EventsQuery
.
new
(
project:
project
,
options:
options
)
@
options
=
options
end
def
issue_events
IssueEvent
.
fetch
(
@query
)
IssueEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
plan_events
PlanEvent
.
fetch
(
@query
)
PlanEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
code_events
CodeEvent
.
fetch
(
@query
)
CodeEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
test_events
TestEvent
.
fetch
(
@query
)
TestEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
review_events
ReviewEvent
.
fetch
(
@query
)
ReviewEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
staging_events
StagingEvent
.
fetch
(
@query
)
StagingEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
def
production_events
ProductionEvent
.
fetch
(
@query
)
ProductionEvent
.
new
(
project:
@project
,
options:
@options
).
fetch
end
end
end
...
...
lib/gitlab/cycle_analytics/events_query.rb
浏览文件 @
d5b673da
...
...
@@ -22,7 +22,7 @@ module Gitlab
base_query
=
@fetcher
.
base_query_for
(
@stage_class
.
stage
)
diff_fn
=
@fetcher
.
subtract_datetimes_diff
(
base_query
,
@stage_class
.
start_time_attrs
,
@stage_class
.
end_time_attrs
)
@stage_class
.
query
(
base_query
)
@stage_class
.
custom_
query
(
base_query
)
base_query
.
project
(
extract_epoch
(
diff_fn
).
as
(
'total_time'
),
*
@stage_class
.
projections
).
order
(
@stage_class
.
order
.
desc
)
end
...
...
lib/gitlab/cycle_analytics/issue_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
IssueEvent
<
BaseEvent
@stage
=
:issue
@start_time_attrs
=
issue_table
[
:created_at
]
def
initialize
(
*
args
)
@stage
=
:issue
@start_time_attrs
=
issue_table
[
:created_at
]
@end_time_attrs
=
[
issue_metrics_table
[
:first_associated_with_milestone_at
],
issue_metrics_table
[
:first_added_to_board_at
]]
@projections
=
[
issue_table
[
:title
],
issue_table
[
:iid
],
issue_table
[
:id
],
issue_table
[
:created_at
],
issue_table
[
:author_id
]]
@end_time_attrs
=
[
issue_metrics_table
[
:first_associated_with_milestone_at
],
issue_metrics_table
[
:first_added_to_board_at
]]
super
(
*
args
)
end
@projections
=
[
issue_table
[
:title
],
issue_table
[
:iid
],
issue_table
[
:id
],
issue_table
[
:created_at
],
issue_table
[
:author_id
]]
private
def
se
lf
.
serialize
(
event
,
query
)
def
se
rialize
(
event
)
event
[
'author'
]
=
User
.
find
(
event
.
delete
(
'author_id'
))
AnalyticsIssueSerializer
.
new
(
project:
query
.
project
).
represent
(
event
).
as_json
AnalyticsIssueSerializer
.
new
(
project:
@project
).
represent
(
event
).
as_json
end
def
has_permission?
(
id
)
@options
[
:current_user
].
can?
(
:read_issue
,
Issue
.
find
(
id
))
end
end
end
...
...
lib/gitlab/cycle_analytics/plan_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
PlanEvent
<
BaseEvent
@stage
=
:plan
@start_time_attrs
=
issue_metrics_table
[
:first_associated_with_milestone_at
]
@end_time_attrs
=
[
issue_metrics_table
[
:first_added_to_board_at
],
issue_metrics_table
[
:first_mentioned_in_commit_at
]]
@projections
=
[
mr_diff_table
[
:st_commits
].
as
(
'commits'
),
issue_metrics_table
[
:first_mentioned_in_commit_at
]]
def
initialize
(
*
args
)
@stage
=
:plan
@start_time_attrs
=
issue_metrics_table
[
:first_associated_with_milestone_at
]
@end_time_attrs
=
[
issue_metrics_table
[
:first_added_to_board_at
],
issue_metrics_table
[
:first_mentioned_in_commit_at
]]
@projections
=
[
mr_diff_table
[
:st_commits
].
as
(
'commits'
),
issue_metrics_table
[
:first_mentioned_in_commit_at
]]
super
(
*
args
)
end
class
<<
self
def
query
(
base_query
)
base_query
.
join
(
mr_diff_table
).
on
(
mr_diff_table
[
:merge_request_id
].
eq
(
mr_table
[
:id
]))
end
def
custom_query
(
base_query
)
base_query
.
join
(
mr_diff_table
).
on
(
mr_diff_table
[
:merge_request_id
].
eq
(
mr_table
[
:id
]))
end
private
private
def
serialize
(
event
,
query
)
st_commit
=
first_time_reference_commit
(
event
.
delete
(
'commits'
),
event
)
def
serialize
(
event
)
st_commit
=
first_time_reference_commit
(
event
.
delete
(
'commits'
),
event
)
return
unless
st_commit
return
unless
st_commit
serialize_commit
(
event
,
st_commit
,
query
)
end
serialize_commit
(
event
,
st_commit
,
query
)
end
def
first_time_reference_commit
(
commits
,
event
)
YAML
.
load
(
commits
).
find
do
|
commit
|
next
unless
commit
[
:committed_date
]
&&
event
[
'first_mentioned_in_commit_at'
]
def
first_time_reference_commit
(
commits
,
event
)
YAML
.
load
(
commits
).
find
do
|
commit
|
next
unless
commit
[
:committed_date
]
&&
event
[
'first_mentioned_in_commit_at'
]
commit
[
:committed_date
].
to_i
==
DateTime
.
parse
(
event
[
'first_mentioned_in_commit_at'
].
to_s
).
to_i
end
commit
[
:committed_date
].
to_i
==
DateTime
.
parse
(
event
[
'first_mentioned_in_commit_at'
].
to_s
).
to_i
end
end
def
serialize_commit
(
event
,
st_commit
,
query
)
commit
=
Commit
.
new
(
Gitlab
::
Git
::
Commit
.
new
(
st_commit
),
@project
)
def
serialize_commit
(
event
,
st_commit
,
query
)
commit
=
Commit
.
new
(
Gitlab
::
Git
::
Commit
.
new
(
st_commit
),
@project
)
AnalyticsCommitSerializer
.
new
(
project:
query
.
project
,
total_time:
event
[
'total_time'
]).
represent
(
commit
).
as_json
end
AnalyticsCommitSerializer
.
new
(
project:
@project
,
total_time:
event
[
'total_time'
]).
represent
(
commit
).
as_json
end
end
end
...
...
lib/gitlab/cycle_analytics/production_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
ProductionEvent
<
BaseEvent
@stage
=
:production
@start_time_attrs
=
issue_table
[
:created_at
]
def
initialize
(
*
args
)
@stage
=
:production
@start_time_attrs
=
issue_table
[
:created_at
]
@end_time_attrs
=
mr_metrics_table
[
:first_deployed_to_production_at
]
@projections
=
[
issue_table
[
:title
],
issue_table
[
:iid
],
issue_table
[
:id
],
issue_table
[
:created_at
],
issue_table
[
:author_id
]]
@end_time_attrs
=
mr_metrics_table
[
:first_deployed_to_production_at
]
super
(
*
args
)
end
@projections
=
[
issue_table
[
:title
],
issue_table
[
:iid
],
issue_table
[
:id
],
issue_table
[
:created_at
],
issue_table
[
:author_id
]]
private
def
se
lf
.
serialize
(
event
,
query
)
def
se
rialize
(
event
)
event
[
'author'
]
=
User
.
find
(
event
.
delete
(
'author_id'
))
AnalyticsIssueSerializer
.
new
(
project:
query
.
project
).
represent
(
event
).
as_json
AnalyticsIssueSerializer
.
new
(
project:
@project
).
represent
(
event
).
as_json
end
def
has_permission?
(
id
)
@options
[
:current_user
].
can?
(
:read_issue
,
Issue
.
find
(
id
))
end
end
end
...
...
lib/gitlab/cycle_analytics/review_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
ReviewEvent
<
BaseEvent
@stage
=
:review
@start_time_attrs
=
mr_table
[
:created_at
]
@end_time_attrs
=
mr_metrics_table
[
:merged_at
]
@projections
=
[
mr_table
[
:title
],
mr_table
[
:iid
],
mr_table
[
:id
],
mr_table
[
:created_at
],
mr_table
[
:state
],
mr_table
[
:author_id
]]
def
initialize
(
*
args
)
@stage
=
:review
@start_time_attrs
=
mr_table
[
:created_at
]
@end_time_attrs
=
mr_metrics_table
[
:merged_at
]
@projections
=
[
mr_table
[
:title
],
mr_table
[
:iid
],
mr_table
[
:id
],
mr_table
[
:created_at
],
mr_table
[
:state
],
mr_table
[
:author_id
]]
def
self
.
serialize
(
event
,
query
)
super
(
*
args
)
end
def
serialize
(
event
)
event
[
'author'
]
=
User
.
find
(
event
.
delete
(
'author_id'
))
AnalyticsMergeRequestSerializer
.
new
(
project:
query
.
project
).
represent
(
event
).
as_json
AnalyticsMergeRequestSerializer
.
new
(
project:
@project
).
represent
(
event
).
as_json
end
def
has_permission?
(
id
)
@options
[
:current_user
].
can?
(
:read_merge_request
,
MergeRequest
.
find
(
id
))
end
end
end
...
...
lib/gitlab/cycle_analytics/staging_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
StagingEvent
<
BaseEvent
@stage
=
:staging
@start_time_attrs
=
mr_metrics_table
[
:merged_at
]
@end_time_attrs
=
mr_metrics_table
[
:first_deployed_to_production_at
]
@projections
=
[
build_table
[
:id
]]
@order
=
build_table
[
:created_at
]
def
initialize
(
*
args
)
@stage
=
:staging
@start_time_attrs
=
mr_metrics_table
[
:merged_at
]
@end_time_attrs
=
mr_metrics_table
[
:first_deployed_to_production_at
]
@projections
=
[
build_table
[
:id
]]
@order
=
build_table
[
:created_at
]
def
self
.
query
(
base_query
)
super
(
*
args
)
end
def
custom_query
(
base_query
)
base_query
.
join
(
build_table
).
on
(
mr_metrics_table
[
:pipeline_id
].
eq
(
build_table
[
:commit_id
]))
end
def
self
.
serialize
(
event
,
_query
)
private
def
serialize
(
event
)
build
=
::
Ci
::
Build
.
find
(
event
[
'id'
])
AnalyticsBuildSerializer
.
new
.
represent
(
build
).
as_json
...
...
lib/gitlab/cycle_analytics/test_event.rb
浏览文件 @
d5b673da
module
Gitlab
module
CycleAnalytics
class
TestEvent
<
BaseEvent
@stage
=
:test
@start_time_attrs
=
mr_metrics_table
[
:latest_build_started_at
]
@end_time_attrs
=
mr_metrics_table
[
:latest_build_finished_at
]
@projections
=
[
build_table
[
:id
]]
@order
=
build_table
[
:created_at
]
def
initialize
(
*
args
)
@stage
=
:test
@start_time_attrs
=
mr_metrics_table
[
:latest_build_started_at
]
@end_time_attrs
=
mr_metrics_table
[
:latest_build_finished_at
]
@projections
=
[
build_table
[
:id
]]
@order
=
build_table
[
:created_at
]
def
self
.
query
(
base_query
)
super
(
*
args
)
end
def
custom_query
(
base_query
)
base_query
.
join
(
build_table
).
on
(
mr_metrics_table
[
:pipeline_id
].
eq
(
build_table
[
:commit_id
]))
end
def
self
.
serialize
(
event
,
_query
)
private
def
serialize
(
event
)
build
=
::
Ci
::
Build
.
find
(
event
[
'id'
])
AnalyticsBuildSerializer
.
new
.
represent
(
build
).
as_json
...
...
spec/lib/gitlab/cycle_analytics/events_spec.rb
浏览文件 @
d5b673da
...
...
@@ -6,7 +6,7 @@ describe Gitlab::CycleAnalytics::Events do
let
(
:user
)
{
create
(
:user
,
:admin
)
}
let!
(
:context
)
{
create
(
:issue
,
project:
project
,
created_at:
2
.
days
.
ago
)
}
subject
{
described_class
.
new
(
project:
project
,
options:
{
from:
from_date
})
}
subject
{
described_class
.
new
(
project:
project
,
options:
{
from:
from_date
,
current_user:
user
})
}
before
do
allow_any_instance_of
(
Gitlab
::
ReferenceExtractor
).
to
receive
(
:issues
).
and_return
([
context
])
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录