blob: 120bcb8433ca1fe6ff9071580e053dd74130f17a [file] [log] [blame]
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001/**
2 * API utilities service
3 *
4 * @module app/common/services/api-utils
5 * @exports APIUtils
6 * @name APIUtils
7 * @version 0.0.1
8 */
9
10window.angular && (function (angular) {
11 'use strict';
12 angular
13 .module('app.common.services')
14 .factory('APIUtils', ['$http', 'Constants', function($http, Constants){
15 var SERVICE = {
16 LOGIN_CREDENTIALS: Constants.LOGIN_CREDENTIALS,
17 API_CREDENTIALS: Constants.API_CREDENTIALS,
18 API_RESPONSE: Constants.API_RESPONSE,
19 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
20 HOST_STATE_TEXT: Constants.HOST_STATE,
21 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050022 LED_STATE: Constants.LED_STATE,
23 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam99d199f2017-03-24 15:28:25 -050024 getChassisState: function(callback){
25 $http({
26 method: 'GET',
27 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/chassis0",
28 headers: {
29 'Accept': 'application/json',
30 'Content-Type': 'application/json'
31 },
32 withCredentials: true
33 }).success(function(response){
34 var json = JSON.stringify(response);
35 var content = JSON.parse(json);
36 callback(content.data.CurrentPowerState);
37 }).error(function(error){
38 console.log(error);
39 });
40 },
41 getHostState: function(callback){
42 $http({
43 method: 'GET',
44 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
45 headers: {
46 'Accept': 'application/json',
47 'Content-Type': 'application/json'
48 },
49 withCredentials: true
50 }).success(function(response){
51 var json = JSON.stringify(response);
52 var content = JSON.parse(json);
53 callback(content.data.CurrentHostState);
54 }).error(function(error){
55 console.log(error);
56 });
57 },
Iftekharul Islamcd789502017-04-19 14:37:55 -050058 getLEDState: function(callback){
59 $http({
60 method: 'GET',
61 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify",
62 headers: {
63 'Accept': 'application/json',
64 'Content-Type': 'application/json'
65 },
66 withCredentials: true
67 }).success(function(response){
68 var json = JSON.stringify(response);
69 var content = JSON.parse(json);
70 callback(content.data.Asserted);
71 }).error(function(error){
72 console.log(error);
73 });
74 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -050075 login: function(username, password, callback){
76 $http({
77 method: 'POST',
78 url: SERVICE.API_CREDENTIALS.host + "/login",
79 headers: {
80 'Accept': 'application/json',
81 'Content-Type': 'application/json'
82 },
83 withCredentials: true,
84 data: JSON.stringify({"data": [username, password]})
85 }).success(function(response){
86 if(callback){
87 callback(response);
88 }
89 }).error(function(error){
90 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -050091 if(error && error.status && error.status == 'error'){
92 callback(error);
93 }else{
94 callback(error, true);
95 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -050096 }
97 console.log(error);
98 });
99 },
100 logout: function(callback){
101 $http({
102 method: 'POST',
103 url: SERVICE.API_CREDENTIALS.host + "/logout",
104 headers: {
105 'Accept': 'application/json',
106 'Content-Type': 'application/json'
107 },
108 withCredentials: true,
109 data: JSON.stringify({"data": []})
110 }).success(function(response){
111 if(callback){
112 callback(response);
113 }
114 }).error(function(error){
115 if(callback){
116 callback(null, error);
117 }
118 console.log(error);
119 });
120 },
121 chassisPowerOn: function(callback){
122 $http({
123 method: 'POST',
124 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
125 headers: {
126 'Accept': 'application/json',
127 'Content-Type': 'application/json'
128 },
129 withCredentials: true,
130 data: JSON.stringify({"data": []})
131 }).success(function(response){
132 var json = JSON.stringify(response);
133 var content = JSON.parse(json);
134 if(callback){
135 return callback(content.data.CurrentPowerState);
136 }
137 }).error(function(error){
138 if(callback){
139 callback(error);
140 }else{
141 console.log(error);
142 }
143 });
144 },
145 chassisPowerOff: function(callback){
146 $http({
147 method: 'POST',
148 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
149 headers: {
150 'Accept': 'application/json',
151 'Content-Type': 'application/json'
152 },
153 withCredentials: true,
154 data: JSON.stringify({"data": []})
155 }).success(function(response){
156 var json = JSON.stringify(response);
157 var content = JSON.parse(json);
158 if(callback){
159 return callback(content.data.CurrentPowerState);
160 }
161 }).error(function(error){
162 if(callback){
163 callback(error);
164 }else{
165 console.log(error);
166 }
167 });
168 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500169 setLEDState: function(state, callback){
170 $http({
171 method: 'PUT',
172 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
173 headers: {
174 'Accept': 'application/json',
175 'Content-Type': 'application/json'
176 },
177 withCredentials: true,
178 data: JSON.stringify({"data": state})
179 }).success(function(response){
180 var json = JSON.stringify(response);
181 var content = JSON.parse(json);
182 if(callback){
183 return callback(content.status);
184 }
185 }).error(function(error){
186 if(callback){
187 callback(error);
188 }else{
189 console.log(error);
190 }
191 });
192 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500193 bmcReboot: function(callback){
194 $http({
195 method: 'PUT',
196 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
197 headers: {
198 'Accept': 'application/json',
199 'Content-Type': 'application/json'
200 },
201 withCredentials: true,
202 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
203 }).success(function(response){
204 var json = JSON.stringify(response);
205 var content = JSON.parse(json);
206 if(callback){
207 return callback(content.status);
208 }
209 }).error(function(error){
210 if(callback){
211 callback(error);
212 }else{
213 console.log(error);
214 }
215 });
216 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500217 hostPowerOn: function(callback){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500218 $http({
219 method: 'PUT',
220 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
221 headers: {
222 'Accept': 'application/json',
223 'Content-Type': 'application/json'
224 },
225 withCredentials: true,
226 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
227 }).success(function(response){
228 var json = JSON.stringify(response);
229 var content = JSON.parse(json);
230 if(callback){
231 return callback(content.status);
232 }
233 }).error(function(error){
234 if(callback){
235 callback(error);
236 }else{
237 console.log(error);
238 }
239 });
240 },
241 hostPowerOff: function(callback){
242 $http({
243 method: 'PUT',
244 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
245 headers: {
246 'Accept': 'application/json',
247 'Content-Type': 'application/json'
248 },
249 withCredentials: true,
250 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
251 }).success(function(response){
252 var json = JSON.stringify(response);
253 var content = JSON.parse(json);
254 if(callback){
255 return callback(content.status);
256 }
257 }).error(function(error){
258 if(callback){
259 callback(error);
260 }else{
261 console.log(error);
262 }
263 });
264 },
265 hostReboot: function(callback){
266 $http({
267 method: 'POST',
268 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
269 headers: {
270 'Accept': 'application/json',
271 'Content-Type': 'application/json'
272 },
273 withCredentials: true,
274 data: JSON.stringify({"data": []}),
275 }).success(function(response){
276 var json = JSON.stringify(response);
277 var content = JSON.parse(json);
278 if(callback){
279 return callback(content);
280 }
281 }).error(function(error){
282 if(callback){
283 callback(error);
284 }else{
285 console.log(error);
286 }
287 });
288 },
289 hostShutdown: function(callback){
290 $http({
291 method: 'POST',
292 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/state/host0",
293 headers: {
294 'Accept': 'application/json',
295 'Content-Type': 'application/json'
296 },
297 withCredentials: true,
298 data: JSON.stringify({"data": []})
299 }).success(function(response){
300 var json = JSON.stringify(response);
301 var content = JSON.parse(json);
302 if(callback){
303 return callback(content);
304 }
305 }).error(function(error){
306 if(callback){
307 callback(error);
308 }else{
309 console.log(error);
310 }
311 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500312 },
313 getLogs: function(callback){
314 $http({
315 method: 'GET',
316 url: SERVICE.API_CREDENTIALS.host + "/xyz/openbmc_project/logging/enumerate",
317 headers: {
318 'Accept': 'application/json',
319 'Content-Type': 'application/json'
320 },
321 withCredentials: true
322 }).success(function(response){
323 var json = JSON.stringify(response);
324 var content = JSON.parse(json);
325 var dataClone = JSON.parse(JSON.stringify(content.data));
326 var data = [];
327 var severityCode = '';
328 var priority = '';
329 var resolved = false;
330 var relatedItems = [];
331
332 for(var key in content.data){
333 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
334 var severityFlags = {low: false, medium: false, high: false};
335 severityCode = content.data[key].Severity.split(".").pop();
336 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
337 severityFlags[priority.toLowerCase()] = true;
338 relatedItems = [];
339 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500340 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500341 });
342
343 data.push(Object.assign({
344 path: key,
345 copied: false,
346 priority: priority,
347 severity_code: severityCode,
348 severity_flags: severityFlags,
349 additional_data: content.data[key].AdditionalData.join("\n"),
350 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500351 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500352 meta: false,
353 confirm: false,
354 related_items: relatedItems,
355 data: {key: key, value: content.data[key]}
356 }, content.data[key]));
357 }
358 }
359 callback(data, dataClone);
360 }).error(function(error){
361 console.log(error);
362 });
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500363 },
364 getAllSensorStatus: function(callback){
365 /**
366 GET https://9.3.185.156/xyz/openbmc_project/sensors/enumerate
367 */
368 $http({
369 method: 'GET',
370 url: "/assets/mocks/sensors.json",
371 headers: {
372 'Accept': 'application/json',
373 'Content-Type': 'application/json'
374 },
375 withCredentials: true
376 }).success(function(response){
377 var json = JSON.stringify(response);
378 var content = JSON.parse(json);
379 var dataClone = JSON.parse(JSON.stringify(content.data));
380 var sensorData = [];
381 var allSensorSeveries = [];
382 var allSensorRows = [];
383 var total = 0;
384 var status = 'normal';
385 var data = {
386 total: 0,
387 status: '',
388 sensors: [{
389 title: 'All Sensors',
390 type: 'all',
391 status: '',
392 severity_flags: {},
393 search_text: '',
394 display_headers: ['Sensor (Unit)', 'Reading', 'State'],
395 data: []
396 }]
397 };
398
399 function getSensorStatus(reading){
400 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '';
401 if(reading.Value >= reading.CriticalLow && reading.Value <= reading.CriticalHigh){
402 severityFlags.critical = true;
403 severityText = 'critical';
404 }
405 else if(reading.Value >= reading.WarningLow && reading.Value <= reading.WarningHigh){
406 severityFlags.warning = true;
407 severityText = 'warning';
408 }else{
409 severityFlags.normal = true;
410 severityText = 'normal';
411 }
412 return { flags: severityFlags, severityText: severityText};
413 }
414
415 for(var key in content.data){
416 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
417 sensorData.push(Object.assign({
418 path: key,
419 selected: false,
420 confirm: false,
421 copied: false,
422 original_data: {key: key, value: content.data[key]}
423 }, content.data[key]));
424 }
425 }
426
427 Constants.SENSOR_DATA_TEMPLATE.sensors.forEach(function(sensor){
428 var rowData = [];
429 var severities = [];
430 var thisSensorData = sensorData.filter(function(el){
431 return el.path.indexOf('sensors/'+sensor.key_search) > -1;
432 });
433
434 for(var i = 0; i < thisSensorData.length; i++){
435
436 var severity = getSensorStatus(thisSensorData[i]);
437 severities.push(severity.severityText);
438 rowData.push(Object.assign({
439 title: sensor.sensor_row.title + (i+1),
440 status: severity.severityText,
441 severity_flags: severity.flags,
442 reading: thisSensorData[i].Value + sensor.sensor_row.reading,
443 search_text: (sensor.sensor_row.title + (i+1) + " " + severity.severityText + " " + thisSensorData[i].Value + sensor.sensor_row.reading).toLowerCase(),
444 indicator: (severity.flags.critical) ? '90%' : ((severity.flags.warning) ? '15%' : '50%')
445 }, thisSensorData[i]));
446 }
447
448 status = (severities.indexOf('critical') > -1) ? 'critical' : ((severities.indexOf('warning') > -1) ? 'warning' : 'normal');
449 total += rowData.length;
450 allSensorSeveries.push(status);
451 var sevFlags = {critical: false, warning: false, normal: false};
452 sevFlags[status] = true;
453 data.sensors.push({
454 title: sensor.title,
455 type: sensor.type,
456 status: status,
457 severity_flags: sevFlags,
458 search_text: (sensor.title + " " + status).toLowerCase(),
459 display_headers: sensor.display_headers,
460 data: rowData
461 });
462 Array.prototype.push.apply(allSensorRows, rowData);
463 });
464
465 data.status = (allSensorSeveries.indexOf('critical') > -1) ? 'critical' : ((allSensorSeveries.indexOf('warning') > -1) ? 'warning' : 'normal');
466 data.total = total;
467 if(allSensorRows.length){
468 data.sensors[0].status = data.status;
469 data.sensors[0].data = allSensorRows;
470 data.sensors[0].search_text = (data.sensors[0].title + " " + data.sensors[0].status).toLowerCase();
471 var flags = {critical: false, warning: false, normal: false};
472 flags[data.status] = true;
473 data.sensors[0].severity_flags = flags;
474 }
475 callback(data, dataClone);
476 }).error(function(error){
477 console.log(error);
478 });
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500479 }
480 };
481 return SERVICE;
482 }]);
483
484 })(window.angular);