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 +7 -0
- data/lib/cloudmunch_Ruby_sdk_v2/AppAbstract.rb +151 -0
- data/lib/cloudmunch_Ruby_sdk_v2/AppContext.rb +17 -0
- data/lib/cloudmunch_Ruby_sdk_v2/CloudmunchService.rb +101 -0
- data/lib/cloudmunch_Ruby_sdk_v2/ServiceProvider.rb +19 -0
- data/lib/cloudmunch_Ruby_sdk_v2/Util.rb +124 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/costview_meta.json +22 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/coverageview_meta.json +34 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/defecttrendview_meta.json +67 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/ilityview_meta.json +66 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/inboundoutboundview_meta.json +67 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/riskview_meta.json +19 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/scopeview_meta.json +60 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/timeview_meta.json +60 -0
- data/lib/cloudmunch_Ruby_sdk_v2/templates/velocityview_meta.json +22 -0
- data/lib/cloudmunch_Ruby_sdk_v2/version.rb +3 -0
- data/lib/cloudmunch_sdk.rb +5 -0
- metadata +118 -0
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,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
|
+
}
|
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: []
|