summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvarac <varacanero@zeromail.org>2016-08-27 21:15:34 +0200
committerVarac <varac@leap.se>2017-10-16 13:20:15 +0200
commit23e9b0e31dce7c290bba8d43322e214e7c2584fe (patch)
treeeef173b35d0412c74480aae413f9bb6d04a9e35d
parentea95a54c8dde97821d32304ea419cb331f7a342a (diff)
Gitlab merge reqs
-rw-r--r--Gemfile.lock8
-rw-r--r--dashboards/dashboard.erb16
-rw-r--r--dashboards/default.erb2
-rw-r--r--jobs/gitlab_merge_requests.rb36
-rw-r--r--smashing.gemspec1
-rw-r--r--widgets/gitlab_merge_requests/gitlab_merge_requests.coffee9
-rw-r--r--widgets/gitlab_merge_requests/gitlab_merge_requests.html18
-rw-r--r--widgets/gitlab_merge_requests/gitlab_merge_requests.scss67
8 files changed, 149 insertions, 8 deletions
diff --git a/Gemfile.lock b/Gemfile.lock
index fecabb2..fc509cd 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -5,6 +5,7 @@ PATH
coffee-script (~> 2.2.0)
crack
execjs (~> 2.0.2)
+ gitlab
nagiosharder
rack (~> 1.5.4)
rufus-scheduler (~> 2.0.24)
@@ -38,15 +39,20 @@ GEM
eventmachine (1.2.0.1)
execjs (2.0.2)
fakeweb (1.3.0)
+ gitlab (3.7.0)
+ httparty (~> 0.13.0)
+ terminal-table
haml (4.0.7)
tilt
hashie (1.2.0)
hike (1.2.3)
http-cookie (1.0.2)
domain_name (~> 0.5)
- httparty (0.14.0)
+ httparty (0.13.7)
+ json (~> 1.8)
multi_xml (>= 0.5.2)
i18n (0.7.0)
+ json (1.8.3)
metaclass (0.0.4)
mime-types (3.1)
mime-types-data (~> 3.2015)
diff --git a/dashboards/dashboard.erb b/dashboards/dashboard.erb
index 7d187ea..35ae341 100644
--- a/dashboards/dashboard.erb
+++ b/dashboards/dashboard.erb
@@ -1,21 +1,25 @@
-<li data-row="1" data-col="1" data-sizex="2" data-sizey="3">
+<li data-row="1" data-col="1" data-sizex="2" data-sizey="4">
<div data-id="jenkinsBuildStatus" data-view="JenkinsBuildStatus" data-title="Jenkins"></div>
</li>
-<li data-row="1" data-col="2" data-sizex="2" data-sizey="1">
+<li data-row="1" data-col="3" data-sizex="2" data-sizey="1">
<div data-id="nagios-mail" data-view="Nagios" data-unordered="true" data-title="Nagios mail.bitmask" data-moreinfo="Unacknowledged events"></div>
</li>
-<li data-row="1" data-col="3" data-sizex="2" data-sizey="1">
+<li data-row="1" data-col="5" data-sizex="2" data-sizey="1">
<div data-id="nagios-demo" data-view="Nagios" data-unordered="true" data-title="Nagios demo.bitmask" data-moreinfo="Unacknowledged events"></div>
</li>
-<li data-row="2" data-col="2" data-sizex="2" data-sizey="1">
+<li data-row="2" data-col="3" data-sizex="2" data-sizey="1">
<div data-id="nagios-dev" data-view="Nagios" data-unordered="true" data-title="Nagios dev.bitmask" data-moreinfo="Unacknowledged events"></div>
</li>
-<li data-row="2" data-col="3" data-sizex="2" data-sizey="1">
+<li data-row="2" data-col="5" data-sizex="2" data-sizey="1">
<div data-id="nagios-unstable" data-view="Nagios" data-unordered="true" data-title="Nagios unstable.bitmask" data-moreinfo="Unacknowledged events"></div>
</li>
-<li data-row="2" data-col="4" data-sizex="2" data-sizey="1">
+<li data-row="3" data-col="3" data-sizex="2" data-sizey="1">
<div data-id="nagios-cdev" data-view="Nagios" data-unordered="true" data-title="Nagios cdev.bitmask" data-moreinfo="Unacknowledged events"></div>
</li>
+
+<li data-row="1" data-col="7" data-sizex="2" data-sizey="4">
+ <div data-view="GitlabMergeRequests" data-id="gitlab-merge-requests"></div>
+</li>
diff --git a/dashboards/default.erb b/dashboards/default.erb
index d5441b8..86110c0 100644
--- a/dashboards/default.erb
+++ b/dashboards/default.erb
@@ -3,7 +3,7 @@ $(function() {
// These settings override the defaults set in application.coffee. You can do this on a per dashboard basis.
Dashing.widget_margins = [2, 2]
Dashing.widget_base_dimensions = [235, 295]
- Dashing.numColumns = 6
+ Dashing.numColumns = 8
});
</script>
diff --git a/jobs/gitlab_merge_requests.rb b/jobs/gitlab_merge_requests.rb
new file mode 100644
index 0000000..f39caf9
--- /dev/null
+++ b/jobs/gitlab_merge_requests.rb
@@ -0,0 +1,36 @@
+require 'gitlab'
+require 'date'
+
+# TODO: Move config to yaml
+my_group_path = 'leap'
+Gitlab.configure do |config|
+ # API endpoint URL, default
+ config.endpoint = ENV['GITLAB_ENDPOINT']
+
+ # User's private token or OAuth2 access token
+ config.private_token = ENV['GITLAB_TOKEN']
+end
+
+pr_widget_data_id = 'gitlab-merge-requests'
+SCHEDULER.every '10m', :first_in => 0 do |job|
+ my_group = Gitlab.groups(:search => my_group_path).find do |group|
+ group.path == my_group_path
+ end
+ projects = Gitlab.group(my_group.id).projects.map do |proj|
+ { :id => proj['id'], :name => proj['name'] }
+ end
+
+ open_merge_requests = projects.inject([]) { |merges, proj|
+ Gitlab.merge_requests(proj[:id], :state => 'opened').each do |request|
+ puts proj[:name] + ': ' + request.title
+ merges.push({
+ title: request.title,
+ repo: proj[:name],
+ updated_at: DateTime.parse(request.updated_at).strftime("%b %-d %Y, %l:%m %p"),
+ creator: "@" + request.author.username
+ })
+ end
+ merges
+ }
+ send_event(pr_widget_data_id, { header: "Open Merge Requests", merges: open_merge_requests })
+end
diff --git a/smashing.gemspec b/smashing.gemspec
index dba7c38..d662f8c 100644
--- a/smashing.gemspec
+++ b/smashing.gemspec
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
# additional deps
s.add_dependency('crack')
s.add_dependency('nagiosharder')
+ s.add_dependency('gitlab')
s.add_development_dependency('rake', '~> 10.1.0')
diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee b/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee
new file mode 100644
index 0000000..e68c3f6
--- /dev/null
+++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.coffee
@@ -0,0 +1,9 @@
+class Dashing.GitlabMergeRequests extends Dashing.Widget
+
+ ready: ->
+ # This is fired when the widget is done being rendered
+
+ onData: (data) ->
+ # Handle incoming data
+ # You can access the html node of this widget with `@node`
+ # Example: $(@node).fadeOut().fadeIn() will make the node flash each time data comes in. \ No newline at end of file
diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.html b/widgets/gitlab_merge_requests/gitlab_merge_requests.html
new file mode 100644
index 0000000..396da97
--- /dev/null
+++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.html
@@ -0,0 +1,18 @@
+<h1 class="header">GitLab</h1>
+<h2 class="sub-header" data-bind="header"></h2>
+
+<ul class="list">
+ <li data-foreach-merge="merges" class="merge">
+ <div class="merge-title" data-bind="merge.title"></div>
+ <div class="merge-info">
+ <div data-bind="merge.creator"></div>
+ <div>&nbsp;&middot;&nbsp;</div>
+ <div data-bind="merge.repo"></div>
+ <div>&nbsp;&middot;&nbsp;</div>
+ <div data-bind="merge.updated_at"></div>
+ </div>
+ <div style="clear: both;"></div>
+ </li>
+</ul>
+
+<p class="updated-at" data-bind="updatedAtMessage"></p>
diff --git a/widgets/gitlab_merge_requests/gitlab_merge_requests.scss b/widgets/gitlab_merge_requests/gitlab_merge_requests.scss
new file mode 100644
index 0000000..d3c51f5
--- /dev/null
+++ b/widgets/gitlab_merge_requests/gitlab_merge_requests.scss
@@ -0,0 +1,67 @@
+// ----------------------------------------------------------------------------
+// Sass declarations
+// ----------------------------------------------------------------------------
+$background-color: teal;
+
+$heading-color: rgba(255, 255, 255, 0.7);
+$merge-title-color: rgba(255, 255, 255, 1.0);
+$merge-info-color: rgba(255, 255, 255, 1.0);
+
+// ----------------------------------------------------------------------------
+// Widget-gitlab-merge-requests styles
+// ----------------------------------------------------------------------------
+.widget-gitlab-merge-requests {
+
+ background-color: $background-color;
+ vertical-align: top !important;
+
+ .header {
+ margin-bottom: 0;
+ font-size: xx-large;
+ color: $heading-color;
+ }
+
+ .sub-header {
+ color: $heading-color;
+ font-size: large;
+ margin-bottom: 1vh;
+ }
+
+ .merge {
+ margin-bottom: 2vh;
+ }
+
+ .merge-title {
+ font-size: medium;
+ font-weight: bold;
+ color: $merge-title-color;
+ }
+
+ .merge-info {
+ font-size: small;
+ font-style: italic;
+ color: $merge-info-color;
+ }
+
+ .merge-info div {
+ float:left;
+ }
+
+ .list {
+ list-style: none;
+ }
+
+ .updated-at {
+ color: rgba(0, 0, 0, 0.3);
+ }
+
+ ol, ul {
+ margin: 0 15px;
+ text-align: left;
+ }
+
+ ol {
+ list-style-position: inside;
+ }
+
+}