cloudmunch_Ruby_sdk_v2 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3226776f9f302934bed9a179fa7b1713d7a5ed1e
4
+ data.tar.gz: 5a77fdb5d8c23ea5141da13171abfdf926f9a8f3
5
+ SHA512:
6
+ metadata.gz: 19b0fbb9d0a8dc900c19fd808e6e75649f2c9050b08f3f455b4a560f9fc22282eb83e7d9cd04c5a5840fa361fab22eb5c55ad5b137878b416c42c3a95dd858ce
7
+ data.tar.gz: 1b0d98ff4a0fd7e3722a4f0879ceeb8686f3912e8e819efbb46642c5335cf9c12c63bfdf78cd634c841e432506f470db54764ac96e883c41e37446e850fd2e43
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/ruby
2
+ $LOAD_PATH << '.'
3
+
4
+ require_relative "CloudmunchService"
5
+ require_relative "Util"
6
+ require_relative "ServiceProvider"
7
+ require_relative "AppContext"
8
+
9
+ class AppAbstract
10
+ include CloudmunchService
11
+ include Util
12
+
13
+ @@config_path = ENV["SDK_CONFIG_PATH"]+"/sdk_config.json"
14
+ @@config = nil
15
+
16
+ def initialize(param = nil)
17
+ @domain, @project, @logfile = "", "", ""
18
+ end
19
+
20
+
21
+ def logInit(log_level)
22
+ @logger = @logger ? @logger : Util.logInit()
23
+ @log_level = log_level
24
+ end
25
+
26
+ def log(level,logString)
27
+ if @logger.nil?
28
+ logInit("DEBUG")
29
+ end
30
+ Util.logIt(@logger, @log_level, level.to_s.downcase, logString)
31
+ end
32
+
33
+
34
+ def logClose()
35
+ Util.logClose(@logger)
36
+ end
37
+
38
+ def getJSONArgs()
39
+ jsonin = nil
40
+ varin=nil
41
+ integration=nil
42
+ loop { case ARGV[0]
43
+ when '-jsoninput' then ARGV.shift; jsonin = ARGV.shift
44
+ when '-variables' then ARGV.shift; varin = ARGV.shift
45
+ when '-integrations' then ARGV.shift; integrations = ARGV.shift
46
+
47
+ when /^-/ then usage("Unknown option: #{ARGV[0].inspect}")
48
+ else break
49
+ end; }
50
+ @json_input = JSON.load(jsonin)
51
+ @var_input =JSON.load(varin)
52
+ @integration_input=JSON.load(integrations)
53
+ createAppContext(json_input);
54
+ end
55
+
56
+ def createAppContext()
57
+ @appContext = getAppContext(var_input)
58
+ end
59
+
60
+
61
+
62
+ def openJSONFile(fileNameWithPath)
63
+ Util.openJSONFile(fileNameWithPath)
64
+ end
65
+
66
+ def generateReport(reportFilename, reportString)
67
+ Util.generateReport(reportFilename, reportString)
68
+ end
69
+
70
+ def getIntegrationDetails(param = nil)
71
+ #@json_input = @json_input ? @json_input : getJSONArgs()
72
+ serviceProvider = ServiceProvider.new(@json_input["providername"])
73
+ serviceProvider.load_data(integration_input)
74
+ return serviceProvider
75
+ end
76
+
77
+ def getAppContext(param = nil)
78
+ @json_input = @json_input ? @json_input : getJSONArgs()
79
+ appContext = AppContext.new(@json_input)
80
+ return appContext
81
+ end
82
+
83
+ def getDataContextFromCMDB(param)
84
+ appContext = getAppContext()
85
+ params = {
86
+ "username" => @@config['username'],
87
+ "customcontext" => param["job"] + "_" + param["context"],
88
+ "action" => "listcustomcontext"
89
+ }
90
+ param.delete("context")
91
+ params = param.merge(params)
92
+
93
+ return CloudmunchService.getDataContext(appContext.get_data('masterurl'), @@config["endpoint"], params)
94
+ end
95
+
96
+ def updateDataContextToCMDB(param)
97
+ appContext = getAppContext()
98
+ params = {
99
+ "username" => @@config['username'],
100
+ "customcontext" => param["job"] + "_" + param["context"],
101
+ "action" => "updatecustomcontext"
102
+ }
103
+ param.delete("context")
104
+ params = param.merge(params)
105
+ return CloudmunchService.updateDataContext(appContext.get_data('masterurl'), @@config['endpoint'], params)
106
+ end
107
+
108
+
109
+ def getCMContext(context)
110
+ begin
111
+ return @@config[context+"_context"]
112
+ rescue
113
+ return false
114
+ end
115
+ end
116
+
117
+ def getTemplate(template_name)
118
+ begin
119
+ Util.getTemplate(template_name)
120
+ rescue
121
+ return false
122
+ end
123
+ end
124
+
125
+ def load_config()
126
+ @@config = openJSONFile(@@config_path)
127
+ end
128
+
129
+ def initializeApp()
130
+ #puts "initializeApp from AppAbstract"
131
+ end
132
+
133
+ def process()
134
+ #puts "process func from AppAbstract"
135
+ end
136
+
137
+ def cleanupApp()
138
+ log("INFO", "\nExiting app")
139
+ #puts "cleanupApp from AppAbstract"
140
+ end
141
+
142
+ def start()
143
+ load_config()
144
+ initializeApp()
145
+ process()
146
+ cleanupApp()
147
+ end
148
+
149
+ private :load_config
150
+
151
+ end
@@ -0,0 +1,17 @@
1
+
2
+
3
+ class AppContext
4
+
5
+ def initialize(param)
6
+ load_data(param)
7
+ end
8
+
9
+ def load_data(param)
10
+ @AppContextParams = param
11
+ end
12
+
13
+ def get_data(keyname)
14
+ @AppContextParams[keyname]
15
+ end
16
+
17
+ end
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'net/http'
4
+ require 'cgi'
5
+ require 'json'
6
+
7
+ require_relative "Util"
8
+
9
+ module CloudmunchService
10
+ include Util
11
+ def initialize(appcontext)
12
+ @applicationContext=appcontext
13
+ end
14
+
15
+ def updateCloudmunchData(context,contextid,data)
16
+
17
+ serverurl=applicationContext.get("{master_url}")+"/applications/"+applicationContext.get("{application}")+"/"+$context+"/"+$contextid;
18
+ uri = URI.parse(serverurl)
19
+
20
+ response= Net::HTTP.post_form(uri,"data" => data12.to_json)
21
+
22
+ return response.body
23
+ end
24
+
25
+
26
+
27
+ def getCloudmunchData(context,contextid,filterdata)
28
+ if contextid.nil? || contextid.empty?
29
+ serverurl=applicationContext.get("{master_url}")+"/applications/"+applicationContext.get("{application}")+"/"+$context
30
+ else
31
+ serverurl=applicationContext.get("{master_url}")+"/applications/"+applicationContext.get("{application}")+"/"+$context+"/"+$contextid;
32
+ end
33
+ querystring=""
34
+ if filterdata.nil? || filterdata.empty?
35
+ serverurl=serverurl+"?apikey=".applicationContext.get("{api_key}")
36
+ else
37
+ querystring="filter="+to_json($filerdata);
38
+ serverurl=serverurl+"?"+querystring+"&apikey=".applicationContext.get("{api_key}")
39
+
40
+ end
41
+ uri = URI.parse(serverurl)
42
+
43
+ return Net::HTTP.get(uri)
44
+ end
45
+
46
+
47
+ def deleteCloudmunchData(context,contextid)
48
+ serverurl=applicationContext.get("{master_url}")+"/applications/"+applicationContext.get("{application}")+"/"+$context+"/"+$contextid;
49
+ uri = URI.parse(serverurl)
50
+ Net::HTTP::Delete(uri)
51
+ end
52
+
53
+
54
+
55
+
56
+ def self.putCustomDataContext(server, endpoint, param)
57
+ result = self.http_post(server, endpoint, param)
58
+ #p result.code.to_s
59
+ if result.code.to_s == "200"
60
+ return true
61
+ else
62
+ return false
63
+ end
64
+ end
65
+
66
+
67
+ def self.getCustomDataContext(server, endpoint, param)
68
+ return self.http_get(server, endpoint, param)
69
+ end
70
+
71
+ def self.http_get(server,path,params)
72
+ if params.nil?
73
+ return Net::HTTP.get(server, path)
74
+ else
75
+ queryStr = "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&'))
76
+ puts ("SDKDEBUG: Calling URL " + server+queryStr)
77
+ uri = URI(server + "/" + queryStr)
78
+ return Net::HTTP.get(uri)
79
+ end
80
+ end
81
+
82
+ def self.http_post(server,path,params)
83
+ queryStr = "#{path}?".concat(params.collect { |k,v| "#{k}=#{CGI::escape(v.to_s)}" }.join('&'))
84
+ puts ("SDKDEBUG: Calling URL " + server+queryStr)
85
+ if params.nil?
86
+ return Net::HTTP.post(server, path)
87
+ else
88
+ uri = URI(server + path)
89
+ return Net::HTTP.post_form(uri, params)
90
+ end
91
+ end
92
+
93
+ def self.getDataContext(server, endpoint, param)
94
+ getCustomDataContext(server, endpoint, param)
95
+ end
96
+
97
+
98
+ def self.updateDataContext(server, endpoint, param)
99
+ putCustomDataContext(server, endpoint, param)
100
+ end
101
+ end
@@ -0,0 +1,19 @@
1
+
2
+
3
+ class ServiceProvider
4
+
5
+ def initialize(providername)
6
+ @providername = providername
7
+ end
8
+
9
+ def load_data(param)
10
+
11
+ $integrations->$provname->$conf
12
+ @SP_data = JSON.parse(param[@providername])["configuration"]
13
+ end
14
+
15
+ def get_data(keyname)
16
+ @SP_data[keyname]
17
+ end
18
+
19
+ end
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/ruby
2
+ require 'logger'
3
+ require 'json'
4
+
5
+
6
+
7
+ module Util
8
+ def Util.logInit()
9
+ logger = Logger.new(STDOUT)
10
+ logger.formatter = proc do |severity, datetime, progname, msg|
11
+ "#{severity}: #{msg}\n"
12
+ end
13
+ return logger
14
+ end
15
+
16
+ def Util.log(logger, level, logString)
17
+ case level
18
+ when "debug"
19
+ logger.debug(logString)
20
+ when "fatal"
21
+ logger.fatal(logString)
22
+ when "error"
23
+ logger.error(logString)
24
+ when "warn"
25
+ logger.warn(logString)
26
+ when "info"
27
+ logger.info(logString)
28
+ else
29
+ logger.unknown(logString)
30
+ end
31
+ end
32
+
33
+ def Util.logIt(logger, log_level, log_level_string, messageString)
34
+ case log_level.downcase
35
+ when "debug"
36
+ if "debug".eql? log_level_string or "fatal".eql? log_level_string or "error".eql? log_level_string or "warn".eql? log_level_string or "info".eql? log_level_string
37
+ log(logger, "debug", messageString)
38
+ end
39
+ when "fatal"
40
+ if "fatal".eql? log_level_string
41
+ log(logger, "fatal", messageString)
42
+ end
43
+ when "error"
44
+ if "error".eql? log_level_string
45
+ log(logger, "error", messageString)
46
+ end
47
+ when "warn"
48
+ if "warn".eql? log_level_string
49
+ log(logger, "warn", messageString)
50
+ end
51
+ when "info"
52
+ if "info".eql? log_level_string
53
+ log(logger, "info", messageString)
54
+ end
55
+ else
56
+ log(logger, "unknown", messageString)
57
+ end
58
+ end
59
+
60
+ def Util.logClose(logger)
61
+ logger.close
62
+ end
63
+
64
+
65
+ def Util.getJSONArgsTEMP(jsonString)
66
+ JSON.parse(jsonString)
67
+ end
68
+
69
+ def Util.getJSONArgs()
70
+ jsonin = nil
71
+ loop { case ARGV[0]
72
+ when '-jsoninput' then ARGV.shift; jsonin = ARGV.shift
73
+ when /^-/ then usage("Unknown option: #{ARGV[0].inspect}")
74
+ else break
75
+ end; }
76
+ return JSON.load(jsonin);
77
+ end
78
+
79
+ def Util.openJSONFile(fileNameWithPath)
80
+ begin
81
+ config = JSON.load(File.open(fileNameWithPath))
82
+ return config
83
+ rescue
84
+ return false
85
+ end
86
+ end
87
+
88
+ def Util.generateReport(reportFileName, reportContent)
89
+ begin
90
+ fp=File.new(reportFileName, 'w')
91
+ fp.write(reportContent)
92
+ fp.close
93
+ return true
94
+ rescue
95
+ puts("ERROR: Could not open output file. Framework error!")
96
+ # exit 1
97
+ return false
98
+ end
99
+ end
100
+
101
+ def Util.getUrlForViewCards(server, endpoint, params)
102
+ newParam = {
103
+ :action => "listcustomcontext",
104
+ :fields => "*",
105
+ }
106
+
107
+ newParam = params.merge(newParam)
108
+ cqlQuery = CloudmunchService.getDataContext(server, endpoint, newParam)
109
+ cqlQuery = JSON.parse(cqlQuery)
110
+ if !cqlQuery[0].nil? && !cqlQuery[0]["url"].nil?
111
+ url = cqlQuery[0]["url"]
112
+ else
113
+ url = ""
114
+ end
115
+
116
+ return url
117
+ end
118
+
119
+ def Util.getTemplate(template_name)
120
+ openJSONFile(File.dirname(__FILE__) +"/templates/#{template_name}.json")
121
+ end
122
+
123
+ end
124
+
@@ -0,0 +1,22 @@
1
+ {
2
+ "name":{"label": "Cost Performance", "color":"grey", "x":100, "y":10},
3
+ "date":"12 April 2015",
4
+ "source": "JIRA",
5
+
6
+ "plots":{
7
+ "cost_data":{
8
+ "type":"line",
9
+ "xaxis":{"label": "Sprints", "color":"black", "placement":"bottom","data":{"domain":{"factor":"1.5"}} } ,
10
+ "yaxis":{"label": "In Millions (USD)", "color":"black", "placement":"left", "plots":["cost_data"], "data":{"domain":{"data":["100", "1000"]}} },
11
+ "plots":{
12
+ "x":["label"],
13
+ "y":["Budget","Planned","Actual"],
14
+ "ystart": "0",
15
+ "Budget":{"color":"blue", "points":{} },
16
+ "Planned":{"color":"green", "points":{} },
17
+ "Actual":{"color":"red", "points":{} }
18
+ }
19
+ }
20
+ },
21
+ "dimensions":{"height":310, "width":400}
22
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name":{"label": "Code Coverage", "color":"black", "x":120, "y":10},
3
+ "date":"12 April 2015",
4
+ "source": "JIRA",
5
+ "plots":{
6
+ "coverage_data":{
7
+ "type":"line",
8
+ "xaxis": {
9
+ "label": "",
10
+ "color": "black",
11
+ "placement": "bottom",
12
+ "data": {
13
+ "domain": {
14
+ "factor": "1.5"
15
+ }
16
+ }
17
+ },
18
+ "yaxis": {
19
+ "label": "% Coverage",
20
+ "color": "black",
21
+ "placement": "left"
22
+ },
23
+ "plots": {
24
+ "x": [
25
+ ],
26
+ "y": [
27
+ ],
28
+ "ystart": "0"
29
+ }
30
+ }
31
+
32
+ },
33
+ "dimensions":{"width":400, "height":310}
34
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": {
3
+ "label": "Defect",
4
+ "color": "grey",
5
+ "x": 40,
6
+ "y": 10
7
+ },
8
+ "date": "12 April 2015",
9
+ "source": "JIRA",
10
+ "plots": {
11
+ "io_data": {
12
+ "type": "line",
13
+ "xaxis": {
14
+ "label": "Days",
15
+ "color": "black",
16
+ "placement": "bottom",
17
+ "data": {
18
+ "domain": {
19
+ "factor": "1.5"
20
+ }
21
+ }
22
+ },
23
+ "yaxis": {
24
+ "label": "Number of Defects",
25
+ "color": "black",
26
+ "placement": "left",
27
+ "plots": [
28
+ "io_data"
29
+ ],
30
+ "data": {
31
+ "domain": {
32
+ "data": [
33
+ "100",
34
+ "1000"
35
+ ]
36
+ }
37
+ }
38
+ },
39
+ "plots": {
40
+ "x": [
41
+ "label"
42
+ ],
43
+ "y": [
44
+ "Inbound",
45
+ "Outbound"
46
+ ],
47
+ "ystart": "0",
48
+ "Budget": {
49
+ "color": "blue",
50
+ "points": {}
51
+ },
52
+ "Planned": {
53
+ "color": "green",
54
+ "points": {}
55
+ },
56
+ "Actual": {
57
+ "color": "red",
58
+ "points": {}
59
+ }
60
+ }
61
+ }
62
+ },
63
+ "dimensions": {
64
+ "height": 310,
65
+ "width": 400
66
+ }
67
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": {
3
+ "label": "Ility Score Card1",
4
+ "color": "grey",
5
+ "x": 100,
6
+ "y": 10
7
+ },
8
+ "date": "30 April 2015",
9
+ "source": "XLS",
10
+ "plots": {
11
+ "ility_data": {
12
+ "type": "line",
13
+ "xaxis": {
14
+ "label": "Days",
15
+ "color": "black",
16
+ "placement": "bottom",
17
+ "data": {
18
+ "domain": {
19
+ "factor": "1.5"
20
+ }
21
+ }
22
+ },
23
+ "yaxis": {
24
+ "label": "PI-Score",
25
+ "color": "black",
26
+ "placement": "left",
27
+ "plots": [
28
+ "ility_data"
29
+ ],
30
+ "data": {
31
+ "domain": {
32
+ "data": [
33
+ "100",
34
+ "1000"
35
+ ]
36
+ }
37
+ }
38
+ },
39
+ "plots": {
40
+ "x": [
41
+ "label"
42
+ ],
43
+ "y": [
44
+ "PI-Score"
45
+ ],
46
+ "ystart": "0",
47
+ "Budget": {
48
+ "color": "blue",
49
+ "points": {}
50
+ },
51
+ "Planned": {
52
+ "color": "green",
53
+ "points": {}
54
+ },
55
+ "Actual": {
56
+ "color": "red",
57
+ "points": {}
58
+ }
59
+ }
60
+ }
61
+ },
62
+ "dimensions": {
63
+ "height": 310,
64
+ "width": 400
65
+ }
66
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": {
3
+ "label": "Defect Inflow/Burn",
4
+ "color": "grey",
5
+ "x": 90,
6
+ "y": 10
7
+ },
8
+ "date": "12 April 2015",
9
+ "source": "JIRA",
10
+ "plots": {
11
+ "io_data": {
12
+ "type": "line",
13
+ "xaxis": {
14
+ "label": "Days",
15
+ "color": "black",
16
+ "placement": "bottom",
17
+ "data": {
18
+ "domain": {
19
+ "factor": "1.5"
20
+ }
21
+ }
22
+ },
23
+ "yaxis": {
24
+ "label": "Number of Defects",
25
+ "color": "black",
26
+ "placement": "left",
27
+ "plots": [
28
+ "io_data"
29
+ ],
30
+ "data": {
31
+ "domain": {
32
+ "data": [
33
+ "100",
34
+ "1000"
35
+ ]
36
+ }
37
+ }
38
+ },
39
+ "plots": {
40
+ "x": [
41
+ "label"
42
+ ],
43
+ "y": [
44
+ "Inbound",
45
+ "Outbound"
46
+ ],
47
+ "ystart": "0",
48
+ "Budget": {
49
+ "color": "blue",
50
+ "points": {}
51
+ },
52
+ "Planned": {
53
+ "color": "green",
54
+ "points": {}
55
+ },
56
+ "Actual": {
57
+ "color": "red",
58
+ "points": {}
59
+ }
60
+ }
61
+ }
62
+ },
63
+ "dimensions": {
64
+ "height": 310,
65
+ "width": 400
66
+ }
67
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name":{"label": "Risk", "color":"grey", "x":120, "y":10},
3
+ "date":"12 April 2015",
4
+ "source": "JIRA",
5
+ "plots":{
6
+ "risk_data":{
7
+ "type":"doughnut",
8
+ "plots":{
9
+ "sections":["Critical", "Warning", "Trivial"],
10
+ "Critical":{"color":"green"},
11
+ "Warning":{"color":"blue"},
12
+ "Trivial":{"color":"yellow"},
13
+ "x":"140",
14
+ "y":"120"
15
+ }
16
+ }
17
+ },
18
+ "dimensions":{"height":310, "width":400}
19
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": {
3
+ "label": "Scope",
4
+ "color": "grey",
5
+ "x": 120,
6
+ "y": 10
7
+ },
8
+ "date": "12 April 2015",
9
+ "source": "JIRA",
10
+ "plots": {
11
+ "scope_data": {
12
+ "type": "area_y",
13
+ "xaxis": {
14
+ "label": "Sprints",
15
+ "color": "black",
16
+ "placement": "bottom",
17
+ "data": {"domain": {"factor": "1.5"}}
18
+ },
19
+ "yaxis": {
20
+ "label": "Story Type",
21
+ "color": "black",
22
+ "placement": "left",
23
+ "plots": ["scope_data"],
24
+ "data": {
25
+ "domain": {
26
+ "data": [
27
+ "100",
28
+ "1000"
29
+ ]
30
+ }
31
+ }
32
+ },
33
+ "plots": {
34
+ "x": ["label"],
35
+ "y": [
36
+ "Budget",
37
+ "Planned",
38
+ "Actual"
39
+ ],
40
+ "ystart": "0",
41
+ "Budget": {
42
+ "color": "blue",
43
+ "points": {}
44
+ },
45
+ "Planned": {
46
+ "color": "green",
47
+ "points": {}
48
+ },
49
+ "Actual": {
50
+ "color": "red",
51
+ "points": {}
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "dimensions": {
57
+ "height": 310,
58
+ "width": 400
59
+ }
60
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": {
3
+ "label": "Sprint Burn-Up",
4
+ "color": "#d3d3d3",
5
+ "x": 120,
6
+ "y": 10
7
+ },
8
+ "date": "12 April 2015",
9
+ "source": "JIRA",
10
+ "plots": {
11
+ "time_data": {
12
+ "type": "line",
13
+ "xaxis": {
14
+ "label": "Sprints",
15
+ "color": "black",
16
+ "placement": "bottom",
17
+ "data": {"domain": {"factor": "1.5"}}
18
+ },
19
+ "yaxis": {
20
+ "label": "Story Points",
21
+ "color": "black",
22
+ "placement": "left",
23
+ "plots": ["time_data"],
24
+ "data": {
25
+ "domain": {
26
+ "data": [
27
+ "100",
28
+ "1000"
29
+ ]
30
+ }
31
+ }
32
+ },
33
+ "plots": {
34
+ "x": ["label"],
35
+ "y": [
36
+ "Budget",
37
+ "Planned",
38
+ "Actual"
39
+ ],
40
+ "ystart": "0",
41
+ "Budget": {
42
+ "color": "blue",
43
+ "points": {}
44
+ },
45
+ "Planned": {
46
+ "color": "green",
47
+ "points": {}
48
+ },
49
+ "Actual": {
50
+ "color": "red",
51
+ "points": {}
52
+ }
53
+ }
54
+ }
55
+ },
56
+ "dimensions": {
57
+ "height": 310,
58
+ "width": 400
59
+ }
60
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name":{"label": "Velocity", "color":"grey", "x":120, "y":10},
3
+ "date":"12 April 2015",
4
+ "source": "JIRA",
5
+
6
+ "plots":{
7
+ "velocity_data":{
8
+ "type":"line",
9
+ "xaxis":{"label": "Sprints", "color":"black", "placement":"bottom","data":{"domain":{"factor":"1.5"}} } ,
10
+ "yaxis":{"label": "Story Points", "color":"black", "placement":"left", "plots":["velocity_data"], "data":{"domain":{"data":["100", "1000"]}} },
11
+ "plots":{
12
+ "x":["label"],
13
+ "y":["Budget","Planned","Actual"],
14
+ "ystart": "0",
15
+ "Budget":{"color":"blue", "points":{} },
16
+ "Planned":{"color":"green", "points":{} },
17
+ "Actual":{"color":"red", "points":{} }
18
+ }
19
+ }
20
+ },
21
+ "dimensions":{"height":310, "width":400}
22
+ }
@@ -0,0 +1,3 @@
1
+ module Cloudmunch
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,5 @@
1
+ require_relative "./cloudmunch_Ruby_sdk_v2/version.rb"
2
+ require_relative "./cloudmunch_Ruby_sdk_v2/AppAbstract.rb"
3
+ module Cloudmunch
4
+ # Your code goes here...
5
+ end
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudmunch_Ruby_sdk_v2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - syamk
8
+ - rosmi
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2015-11-16 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: logger
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: bundler
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: '1.10'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '1.10'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '10.0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '10.0'
70
+ description: Cloudmunch Ruby SDK to build plugins for cloudmunch platform.
71
+ email:
72
+ - rosmi@cloudmunch.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/cloudmunch_Ruby_sdk_v2/AppAbstract.rb
78
+ - lib/cloudmunch_Ruby_sdk_v2/AppContext.rb
79
+ - lib/cloudmunch_Ruby_sdk_v2/CloudmunchService.rb
80
+ - lib/cloudmunch_Ruby_sdk_v2/ServiceProvider.rb
81
+ - lib/cloudmunch_Ruby_sdk_v2/templates/costview_meta.json
82
+ - lib/cloudmunch_Ruby_sdk_v2/templates/coverageview_meta.json
83
+ - lib/cloudmunch_Ruby_sdk_v2/templates/defecttrendview_meta.json
84
+ - lib/cloudmunch_Ruby_sdk_v2/templates/ilityview_meta.json
85
+ - lib/cloudmunch_Ruby_sdk_v2/templates/inboundoutboundview_meta.json
86
+ - lib/cloudmunch_Ruby_sdk_v2/templates/riskview_meta.json
87
+ - lib/cloudmunch_Ruby_sdk_v2/templates/scopeview_meta.json
88
+ - lib/cloudmunch_Ruby_sdk_v2/templates/timeview_meta.json
89
+ - lib/cloudmunch_Ruby_sdk_v2/templates/velocityview_meta.json
90
+ - lib/cloudmunch_Ruby_sdk_v2/Util.rb
91
+ - lib/cloudmunch_Ruby_sdk_v2/version.rb
92
+ - lib/cloudmunch_sdk.rb
93
+ homepage: https://rubygems.org/gems/cloudmunch_Ruby_sdk_v2
94
+ licenses:
95
+ - MIT
96
+ metadata:
97
+ allowed_push_host: https://rubygems.org
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.0.14
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: Cloudmunch Ruby SDK.
118
+ test_files: []