diff --git a/data/model/legacy.py b/data/model/legacy.py index e24a2675e..058d65248 100644 --- a/data/model/legacy.py +++ b/data/model/legacy.py @@ -2537,6 +2537,26 @@ def cancel_repository_build(build, work_queue): build.delete_instance() return True +def get_repository_pushes(repository, time_delta): + since = date.today() - time_delta + push_repo = LogEntryKind.get(name = 'push_repo') + return (LogEntry.select() + .where(LogEntry.repository == repository) + .where(LogEntry.kind == push_repo) + .where(LogEntry.datetime >= since) + .count()) + +def get_repository_pulls(repository, time_delta): + since = date.today() - time_delta + repo_pull = LogEntryKind.get(name = 'pull_repo') + repo_verb = LogEntryKind.get(name = 'repo_verb') + return (LogEntry.select() + .where(LogEntry.repository == repository) + .where((LogEntry.kind == repo_pull) | (LogEntry.kind == repo_verb)) + .where(LogEntry.datetime >= since) + .count()) + + def get_repository_usage(): one_month_ago = date.today() - timedelta(weeks=4) repo_pull = LogEntryKind.get(name = 'pull_repo') diff --git a/endpoints/api/repository.py b/endpoints/api/repository.py index 49369e61f..84d07bec3 100644 --- a/endpoints/api/repository.py +++ b/endpoints/api/repository.py @@ -1,6 +1,7 @@ import logging import json import datetime +from datetime import timedelta from flask import request @@ -213,7 +214,17 @@ class Repository(RepositoryParamResource): 'is_building': len(list(active_builds)) > 0, 'is_organization': bool(organization), 'is_starred': is_starred, - 'status_token': repo.badge_token if not is_public else '' + 'status_token': repo.badge_token if not is_public else '', + 'stats': { + 'pulls': { + 'today': model.get_repository_pulls(repo, timedelta(days=1)), + 'thirty_day': model.get_repository_pulls(repo, timedelta(days=30)) + }, + 'pushes': { + 'today': model.get_repository_pushes(repo, timedelta(days=1)), + 'thirty_day': model.get_repository_pushes(repo, timedelta(days=30)) + } + } } raise NotFound() diff --git a/static/css/core-ui.css b/static/css/core-ui.css index 6d029372a..4aea13371 100644 --- a/static/css/core-ui.css +++ b/static/css/core-ui.css @@ -86,7 +86,7 @@ width: 100%; display: table-cell; float: none; - padding: 20px; + padding: 30px; } .co-tabs li { diff --git a/static/css/directives/repo-view/repo-panel-info.css b/static/css/directives/repo-view/repo-panel-info.css new file mode 100644 index 000000000..0fa8a7e48 --- /dev/null +++ b/static/css/directives/repo-view/repo-panel-info.css @@ -0,0 +1,63 @@ +.repo-panel-info-element .stat-col { + border-right: 2px solid #eee; +} + +.repo-panel-info-element .stat-title { + text-align: center; + display: block; + font-size: 20px; + margin-bottom: 10px; +} + +.repo-panel-info-element .stat { + text-align: center; + margin-bottom: 20px; +} + +.repo-panel-info-element .stat .stat-value { + font-size: 46px; +} + +.repo-panel-info-element .stat .stat-subtitle { + font-size: 12px; + color: #ccc; + text-transform: uppercase; +} + +.repo-panel-info-element .description-container { + margin-top: 30px; + border-top: 2px solid #eee; + padding-top: 18px; +} + +.repo-panel-info-element .description { + padding-bottom: 0px; + position: relative; +} + +.repo-panel-info-element .description p { + font-size: 16px !important; +} + +.repo-panel-info-element .description-container h4:before { + content: "\f02d"; + color: #black; + font-size: 20px; + font-family: FontAwesome; + margin-right: 6px; +} + +.repo-panel-info-element .description .fa-edit { + display: none; +} + +.repo-panel-info-element .build-mini-status { + margin-top: 10px; + margin-bottom: 10px; +} + +.repo-panel-info-element .view-all { + display: block; + padding: 10px; + text-align: center; +} \ No newline at end of file diff --git a/static/css/directives/ui/build-info-bar.css b/static/css/directives/ui/build-info-bar.css index 2421b89a9..fc4c807d7 100644 --- a/static/css/directives/ui/build-info-bar.css +++ b/static/css/directives/ui/build-info-bar.css @@ -31,4 +31,8 @@ .build-info-bar-element .build-side-info .timing { text-align: right; +} + +.build-info-bar-element .source-commit-link { + margin-left: 4px; } \ No newline at end of file diff --git a/static/css/directives/ui/build-mini-status.css b/static/css/directives/ui/build-mini-status.css new file mode 100644 index 000000000..f4e82a977 --- /dev/null +++ b/static/css/directives/ui/build-mini-status.css @@ -0,0 +1,53 @@ +.build-mini-status { + display: block; + padding: 4px; + position: relative; + border: 1px solid #eee; +} + +.build-mini-status-element { + color: black; + text-decoration: none !important; +} + +.build-mini-status .build-status-icon { + width: 42px; + padding: 4px; + text-align: center; + display: inline-block; + font-size: 18px; +} + +.build-mini-status .timing { + display: inline-block; + margin-left: 30px; + margin-right: 20px; +} + +.build-mini-status .timing .fa { + display: inline-block; + margin-right: 4px; +} + +.build-mini-status .build-description { + position: absolute; + top: 4px; + right: 4px; + left: 250px; + bottom: 4px; + line-height: 33px; + overflow: hidden; + text-overflow: ellipsis; +} + +.build-mini-status .build-status-icon.error { + color: red; +} + +.build-mini-status .build-status-icon.internalerror { + color: #DFFF00; +} + +.build-mini-status .build-status-icon.complete { + color: #2fcc66; +} \ No newline at end of file diff --git a/static/directives/build-info-bar.html b/static/directives/build-info-bar.html index 4a970d727..45b17d47c 100644 --- a/static/directives/build-info-bar.html +++ b/static/directives/build-info-bar.html @@ -5,7 +5,7 @@
- (Click to set {{ fieldTitle }}) + Click to set {{ fieldTitle }}
diff --git a/static/directives/repo-view/repo-panel-info.html b/static/directives/repo-view/repo-panel-info.html index c9e415043..06f45acf4 100644 --- a/static/directives/repo-view/repo-panel-info.html +++ b/static/directives/repo-view/repo-panel-info.html @@ -1,9 +1,72 @@