help_desk_dashboard 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. data/bin/help_desk_dashboard.rb +22 -15
  2. data/lib/help-desk-dashboard/app_config.rb +33 -0
  3. data/lib/help-desk-dashboard/provider_factory.rb +3 -4
  4. data/lib/help-desk-dashboard/providers/service-desk-plus/8.1/provider.rb +3 -3
  5. data/lib/help-desk-dashboard/providers/track-it/2003.10.1/provider.rb +6 -7
  6. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/css/bootstrap-responsive.css +0 -0
  7. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/css/bootstrap-responsive.min.css +0 -0
  8. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/css/bootstrap.css +0 -0
  9. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/css/bootstrap.min.css +0 -0
  10. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/img/glyphicons-halflings-white.png +0 -0
  11. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/img/glyphicons-halflings.png +0 -0
  12. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/js/bootstrap.js +0 -0
  13. data/lib/help-desk-dashboard/web/{public → assets}/bootstrap/js/bootstrap.min.js +0 -0
  14. data/lib/help-desk-dashboard/web/{public → assets}/css/app.css +0 -0
  15. data/lib/help-desk-dashboard/web/{public → assets}/js/app.js +5 -1
  16. data/lib/help-desk-dashboard/web/{public → assets}/js/jquery-1.10.1.min.js +0 -0
  17. data/lib/help-desk-dashboard/web/{public → assets}/js/moment.min.js +0 -0
  18. data/lib/help-desk-dashboard/web/config.ru +2 -4
  19. data/lib/help-desk-dashboard/web/index.html +16 -0
  20. data/lib/help-desk-dashboard/web_generator.rb +27 -0
  21. metadata +25 -24
  22. data/lib/help-desk-dashboard/config_loader.rb +0 -13
  23. data/lib/help-desk-dashboard/web/public/index.html +0 -16
@@ -1,31 +1,38 @@
1
1
  $stdout.sync = true
2
2
 
3
- require_relative '../lib/help-desk-dashboard/config_loader'
3
+ require_relative '../lib/help-desk-dashboard/app_config'
4
4
  require_relative '../lib/help-desk-dashboard/extensions'
5
5
  require_relative '../lib/help-desk-dashboard/provider_factory'
6
+ require_relative '../lib/help-desk-dashboard/web_generator'
7
+
8
+ ENV['HTTP_PROXY'] = nil
9
+ ENV['CONFIG_FILE'] ||= 'config.json'
10
+ config = AppConfig.from_file ENV['CONFIG_FILE']
6
11
 
7
- config = load_config
8
12
  provider_factory = ProviderFactory.new
9
- provider = provider_factory.create config
10
- requests = provider.get_requests.map do |r|
13
+ provider = provider_factory.create config[:provider]
14
+ requests = provider.get_requests(config.users_with_password, threads: config[:threads]).map do |r|
11
15
  r.pick :id, :title, :status, :deadline, :assigned_to, :submitted_by, :submitted_on, :resolved_on
12
16
  end
13
17
 
18
+ requests_by_submitter = requests.group_by { |r| r[:submitted_by] }
19
+
20
+ teams = config[:teams].map do |team|
21
+ {
22
+ team_name: team[:name],
23
+ title: "#{team[:name]} Help Desk Requests",
24
+ requests: team[:members].map { |username| requests_by_submitter[username] }.flatten
25
+ }
26
+ end
27
+
14
28
  requests.each do |r|
15
- user = config[:users].select { |u| u[:username] == r[:assigned_to] }[0]
29
+ user = config[:users].find { |u| u[:username] == r[:assigned_to] }
16
30
  r[:assigned_to] = user[:name] if user
17
- user = config[:users].select { |u| u[:username] == r[:submitted_by] }[0]
31
+ user = config[:users].find { |u| u[:username] == r[:submitted_by] }
18
32
  r[:submitted_by] = user[:name] if user
19
33
  end
20
34
 
21
- data = {
22
- title: config[:title],
23
- requests: requests
24
- }
25
-
26
- public_web_dir = File.join File.dirname(__FILE__) + '/../lib/help-desk-dashboard/web/public'
27
- data_file = File.join public_web_dir, 'data.json'
28
- File.write data_file, data.to_json
29
- FileUtils.cp_r "#{public_web_dir}/.", config[:output_dir]
35
+ generator = WebGenerator.new config[:output_dir]
36
+ generator.generate teams
30
37
 
31
38
  puts 'Done.'
@@ -0,0 +1,33 @@
1
+ require 'hashie'
2
+ require 'json'
3
+
4
+ class AppConfig
5
+
6
+ def initialize(config)
7
+ set_defaults config
8
+ @config = Hashie::Mash.new config
9
+ end
10
+
11
+ def [](key)
12
+ @config[key]
13
+ end
14
+
15
+ def users_with_password
16
+ @config[:users].select { |u| u[:password] }
17
+ end
18
+
19
+ def self.from_file(path)
20
+ json = File.read path
21
+ config = JSON.parse json
22
+ AppConfig.new config
23
+ end
24
+
25
+ private
26
+
27
+ def set_defaults(config)
28
+ config[:title] ||= 'Help Desk Dashboard'
29
+ config[:output_dir] ||= 'output'
30
+ config[:threads] = (config[:threads] || '1').to_i
31
+ end
32
+
33
+ end
@@ -1,10 +1,9 @@
1
1
  class ProviderFactory
2
2
 
3
- def create(config)
4
- provider = config[:provider]
5
- path = File.join File.dirname(__FILE__), 'providers', provider[:name], provider[:version], 'provider.rb'
3
+ def create(provider_info)
4
+ path = File.join File.dirname(__FILE__), 'providers', provider_info[:name], provider_info[:version], 'provider.rb'
6
5
  load path
7
- Provider.new config
6
+ Provider.new provider_info[:url]
8
7
  end
9
8
 
10
9
  end
@@ -1,10 +1,10 @@
1
1
  class Provider
2
2
 
3
- def initialize(config)
4
-
3
+ def initialize(url)
4
+ @url = url
5
5
  end
6
6
 
7
- def get_requests
7
+ def get_requests(users, options)
8
8
 
9
9
  end
10
10
 
@@ -5,22 +5,21 @@ require_relative 'user_operations'
5
5
 
6
6
  class Provider
7
7
 
8
- def initialize(config)
9
- @config = config
8
+ def initialize(url)
9
+ @url = url
10
10
  end
11
11
 
12
- def get_requests
13
- url = @config[:provider][:url]
14
- users = @config[:users].select { |u| u[:password] }
12
+ def get_requests(users, options={})
13
+ threads = options[:threads] || 5
15
14
 
16
15
  b = Watir::Browser.new
17
- navigator = Navigator.new b, url
16
+ navigator = Navigator.new b, @url
18
17
  user_operations = UserOperations.new b, navigator
19
18
  request_ids = user_operations.get_request_ids users
20
19
  b.close
21
20
 
22
21
  user = users.first
23
- parallel_request_scraper = ParallelRequestScraper.new url, user, @config[:threads]
22
+ parallel_request_scraper = ParallelRequestScraper.new @url, user, threads
24
23
  parallel_request_scraper.scrape request_ids
25
24
  end
26
25
 
@@ -94,7 +94,11 @@ function getParameterByName(name) {
94
94
  }
95
95
 
96
96
  $(document).ready(function () {
97
- $.getJSON('data.json', function (data) {
97
+ var team = getParameterByName('team');
98
+ if(team == null) return;
99
+ var data_file = 'data/' + team + '.json';
100
+
101
+ $.getJSON(data_file, function (data) {
98
102
  $('div.title').text(data.title);
99
103
  $.each(data.requests, function (i, request) {
100
104
  add_methods_to_request(request);
@@ -1,8 +1,6 @@
1
1
  require 'rack'
2
2
 
3
- use Rack::Static,
4
- :urls => %w(/bootstrap /css /js /data.json),
5
- :root => 'public'
3
+ use Rack::Static, urls: %w(/assets /data)
6
4
 
7
5
  run lambda { |env|
8
6
  [
@@ -11,6 +9,6 @@ run lambda { |env|
11
9
  'Content-Type' => 'text/html',
12
10
  'Cache-Control' => 'public, max-age=86400'
13
11
  },
14
- File.open('public/index.html', File::RDONLY)
12
+ File.open('index.html', File::RDONLY)
15
13
  ]
16
14
  }
@@ -0,0 +1,16 @@
1
+ <html>
2
+ <head>
3
+ <title>Help Desk Requests</title>
4
+ <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
5
+ <link href="assets/css/app.css" rel="stylesheet"/>
6
+ <script src="assets/js/jquery-1.10.1.min.js"></script>
7
+ <script src="assets/bootstrap/js/bootstrap.min.js"></script>
8
+ <script src="assets/js/moment.min.js"></script>
9
+ <script src="assets/js/app.js"></script>
10
+ </head>
11
+ <body>
12
+ <div id="container" class="container-fluid">
13
+ <div class="title">Help Desk Requests</div>
14
+ </div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,27 @@
1
+ require 'fileutils'; include FileUtils
2
+ require 'json'
3
+
4
+ class WebGenerator
5
+
6
+ def initialize(dest_dir)
7
+ @dest_dir = dest_dir
8
+ @dest_data_dir = File.join @dest_dir, 'data'
9
+ @source_dir = File.join File.dirname(__FILE__), 'web'
10
+ end
11
+
12
+ def generate(teams)
13
+ rm_rf @dest_dir
14
+ cp_r "#{@source_dir}/.", @dest_dir
15
+ mkdir_p @dest_data_dir
16
+ teams.each { |t| create_data_file t }
17
+ end
18
+
19
+ private
20
+
21
+ def create_data_file(team)
22
+ file_name = "#{team[:team_name]}.json".downcase.gsub(' ', '-')
23
+ path = File.join @dest_data_dir, file_name
24
+ File.write path, team.to_json
25
+ end
26
+
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: help_desk_dashboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-30 00:00:00.000000000 Z
12
+ date: 2013-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie
16
- requirement: &70140410978900 !ruby/object:Gem::Requirement
16
+ requirement: &70277845991220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.0.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70140410978900
24
+ version_requirements: *70277845991220
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70140410978420 !ruby/object:Gem::Requirement
27
+ requirement: &70277845990740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.7.7
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70140410978420
35
+ version_requirements: *70277845990740
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: watir-webdriver
38
- requirement: &70140410977960 !ruby/object:Gem::Requirement
38
+ requirement: &70277845990280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.6.4
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70140410977960
46
+ version_requirements: *70277845990280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rack
49
- requirement: &70140410977500 !ruby/object:Gem::Requirement
49
+ requirement: &70277845989820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.5.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70140410977500
57
+ version_requirements: *70277845989820
58
58
  description:
59
59
  email: matthew-github@matthewriley.name
60
60
  executables:
@@ -62,7 +62,7 @@ executables:
62
62
  extensions: []
63
63
  extra_rdoc_files: []
64
64
  files:
65
- - lib/help-desk-dashboard/config_loader.rb
65
+ - lib/help-desk-dashboard/app_config.rb
66
66
  - lib/help-desk-dashboard/extensions.rb
67
67
  - lib/help-desk-dashboard/provider_factory.rb
68
68
  - lib/help-desk-dashboard/providers/service-desk-plus/8.1/provider.rb
@@ -72,20 +72,21 @@ files:
72
72
  - lib/help-desk-dashboard/providers/track-it/2003.10.1/request_scraper.rb
73
73
  - lib/help-desk-dashboard/providers/track-it/2003.10.1/user_operations.rb
74
74
  - lib/help-desk-dashboard/providers/track-it/2003.10.1/user_request_scraper.rb
75
+ - lib/help-desk-dashboard/web/assets/bootstrap/css/bootstrap-responsive.css
76
+ - lib/help-desk-dashboard/web/assets/bootstrap/css/bootstrap-responsive.min.css
77
+ - lib/help-desk-dashboard/web/assets/bootstrap/css/bootstrap.css
78
+ - lib/help-desk-dashboard/web/assets/bootstrap/css/bootstrap.min.css
79
+ - lib/help-desk-dashboard/web/assets/bootstrap/img/glyphicons-halflings-white.png
80
+ - lib/help-desk-dashboard/web/assets/bootstrap/img/glyphicons-halflings.png
81
+ - lib/help-desk-dashboard/web/assets/bootstrap/js/bootstrap.js
82
+ - lib/help-desk-dashboard/web/assets/bootstrap/js/bootstrap.min.js
83
+ - lib/help-desk-dashboard/web/assets/css/app.css
84
+ - lib/help-desk-dashboard/web/assets/js/app.js
85
+ - lib/help-desk-dashboard/web/assets/js/jquery-1.10.1.min.js
86
+ - lib/help-desk-dashboard/web/assets/js/moment.min.js
75
87
  - lib/help-desk-dashboard/web/config.ru
76
- - lib/help-desk-dashboard/web/public/bootstrap/css/bootstrap-responsive.css
77
- - lib/help-desk-dashboard/web/public/bootstrap/css/bootstrap-responsive.min.css
78
- - lib/help-desk-dashboard/web/public/bootstrap/css/bootstrap.css
79
- - lib/help-desk-dashboard/web/public/bootstrap/css/bootstrap.min.css
80
- - lib/help-desk-dashboard/web/public/bootstrap/img/glyphicons-halflings-white.png
81
- - lib/help-desk-dashboard/web/public/bootstrap/img/glyphicons-halflings.png
82
- - lib/help-desk-dashboard/web/public/bootstrap/js/bootstrap.js
83
- - lib/help-desk-dashboard/web/public/bootstrap/js/bootstrap.min.js
84
- - lib/help-desk-dashboard/web/public/css/app.css
85
- - lib/help-desk-dashboard/web/public/index.html
86
- - lib/help-desk-dashboard/web/public/js/app.js
87
- - lib/help-desk-dashboard/web/public/js/jquery-1.10.1.min.js
88
- - lib/help-desk-dashboard/web/public/js/moment.min.js
88
+ - lib/help-desk-dashboard/web/index.html
89
+ - lib/help-desk-dashboard/web_generator.rb
89
90
  - !binary |-
90
91
  YmluL2hlbHBfZGVza19kYXNoYm9hcmQucmI=
91
92
  homepage:
@@ -1,13 +0,0 @@
1
- require 'hashie'
2
- require 'json'
3
-
4
- def load_config
5
- ENV['HTTP_PROXY'] = nil
6
- ENV['CONFIG_FILE'] ||= 'config.json'
7
- json = File.read(ENV['CONFIG_FILE'])
8
- config = Hashie::Mash.new JSON.parse(json)
9
- config[:title] ||= 'Help Desk Dashboard'
10
- config[:output_dir] ||= 'output'
11
- config[:threads] = (config[:threads] || '1').to_i
12
- config
13
- end
@@ -1,16 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Help Desk Dashboard</title>
4
- <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
5
- <link href="css/app.css" rel="stylesheet"/>
6
- <script src="js/jquery-1.10.1.min.js"></script>
7
- <script src="/bootstrap/js/bootstrap.min.js"></script>
8
- <script src="js/moment.min.js"></script>
9
- <script src="js/app.js"></script>
10
- </head>
11
- <body>
12
- <div id="container" class="container-fluid">
13
- <div class="title">Help Desk Dashboard</div>
14
- </div>
15
- </body>
16
- </html>