cloudmunch_Ruby_sdk_v2 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: []