blob: d43dbdbab63726e5e819053195c470cc84440133 [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')
Iftekharul Islam1acb4122017-11-02 13:20:32 -050014 .factory('APIUtils', ['$http', 'Constants', '$q', 'dataService',function($http, Constants, $q, DataService){
CamVan Nguyen33275832018-03-13 18:38:37 -050015 var getScaledValue = function(value, scale){
16 scale = scale + "";
17 scale = parseInt(scale, 10);
18 var power = Math.abs(parseInt(scale,10));
19
20 if(scale > 0){
21 value = value * Math.pow(10, power);
22 }else if(scale < 0){
23 value = value / Math.pow(10, power);
24 }
25 return value;
26 };
Iftekharul Islam99d199f2017-03-24 15:28:25 -050027 var SERVICE = {
Iftekharul Islam99d199f2017-03-24 15:28:25 -050028 API_CREDENTIALS: Constants.API_CREDENTIALS,
29 API_RESPONSE: Constants.API_RESPONSE,
30 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
31 HOST_STATE_TEXT: Constants.HOST_STATE,
32 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050033 LED_STATE: Constants.LED_STATE,
34 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam1acb4122017-11-02 13:20:32 -050035 HOST_SESSION_STORAGE_KEY: Constants.API_CREDENTIALS.host_storage_key,
Iftekharul Islama1d238f2018-02-26 12:29:45 -060036 getChassisState: function(){
37 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050038 $http({
39 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060040 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/CurrentPowerState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050041 headers: {
42 'Accept': 'application/json',
43 'Content-Type': 'application/json'
44 },
45 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070046 }).then(function(response){
47 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050048 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060049 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070050 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050051 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060052 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050053 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060054 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050055 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -060056 getHostState: function(){
57 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050058 $http({
59 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060060 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/CurrentHostState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050061 headers: {
62 'Accept': 'application/json',
63 'Content-Type': 'application/json'
64 },
65 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070066 }).then(function(response){
67 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050068 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060069 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070070 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050071 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060072 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050073 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060074 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050075 },
Iftekharul Islam171c6a12017-08-11 08:35:47 -050076 getNetworkInfo: function(){
77 var deferred = $q.defer();
78 $http({
79 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050080 url: DataService.getHost() + "/xyz/openbmc_project/network/enumerate",
Iftekharul Islam171c6a12017-08-11 08:35:47 -050081 headers: {
82 'Accept': 'application/json',
83 'Content-Type': 'application/json'
84 },
85 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070086 }).then(function(response){
87 var json = JSON.stringify(response.data);
Iftekharul Islam171c6a12017-08-11 08:35:47 -050088 var content = JSON.parse(json);
89 var hostname = "";
90 var macAddress = "";
91
Iftekharul Islam2a489552017-11-02 13:23:08 -050092 function parseNetworkData(content){
93 var data = {
94 interface_ids: [],
95 interfaces: {
96 }
97 };
98 var interfaceId = '', keyParts = [], interfaceHash = '', interfaceType = '';
99 for(var key in content.data){
100 if(key.match(/network\/eth\d+$/ig)){
101 interfaceId = key.split("/").pop();
102 if(data.interface_ids.indexOf(interfaceId) == -1){
103 data.interface_ids.push(interfaceId);
104 data.interfaces[interfaceId] = {
105 interfaceIname: '',
106 domainName:'',
107 MACAddress:'',
108 Nameservers: [],
109 DHCPEnabled: 0,
110 ipv4:
111 {
112 ids: [],
113 values: []
114 },
115 ipv6:
116 {
117 ids: [],
118 values: []
119 }
120 };
121 data.interfaces[interfaceId].MACAddress = content.data[key].MACAddress;
122 data.interfaces[interfaceId].DomainName = content.data[key].DomainName.join(" ");
123 data.interfaces[interfaceId].Nameservers = content.data[key].Nameservers;
124 data.interfaces[interfaceId].DHCPEnabled = content.data[key].DHCPEnabled;
125 }
126 }else if(key.match(/network\/eth\d+\/ipv[4|6]\/[a-z0-9]+$/ig)){
127 keyParts = key.split("/");
128 interfaceHash = keyParts.pop();
129 interfaceType = keyParts.pop();
130 interfaceId = keyParts.pop();
131
132 if(data.interfaces[interfaceId][interfaceType].ids.indexOf(interfaceHash) == -1){
133 data.interfaces[interfaceId][interfaceType].ids.push(interfaceHash);
134 data.interfaces[interfaceId][interfaceType].values.push(content.data[key]);
135 }
136 }
137 }
138 return data;
139 }
140
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500141 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/config') &&
142 content.data['/xyz/openbmc_project/network/config'].hasOwnProperty('HostName')
143 ){
144 hostname = content.data['/xyz/openbmc_project/network/config'].HostName;
145 }
146
147 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/eth0') &&
148 content.data['/xyz/openbmc_project/network/eth0'].hasOwnProperty('MACAddress')
149 ){
150 macAddress = content.data['/xyz/openbmc_project/network/eth0'].MACAddress;
151 }
152
153 deferred.resolve({
154 data: content.data,
155 hostname: hostname,
156 mac_address: macAddress,
Iftekharul Islam2a489552017-11-02 13:23:08 -0500157 formatted_data: parseNetworkData(content)
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500158 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700159 }, function(error){
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500160 console.log(error);
161 deferred.reject(error);
162 });
163 return deferred.promise;
164 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500165 getLEDState: function(){
166 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500167 $http({
168 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500169 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500170 headers: {
171 'Accept': 'application/json',
172 'Content-Type': 'application/json'
173 },
174 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700175 }).then(function(response){
176 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500177 var content = JSON.parse(json);
178 deferred.resolve(content.data.Asserted);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700179 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500180 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500181 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500182 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500183 return deferred.promise;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500184 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500185 login: function(username, password, callback){
186 $http({
187 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500188 url: DataService.getHost() + "/login",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500189 headers: {
190 'Accept': 'application/json',
191 'Content-Type': 'application/json'
192 },
193 withCredentials: true,
194 data: JSON.stringify({"data": [username, password]})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700195 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500196 if(callback){
Ed Tanousbbcf6702017-10-06 13:53:06 -0700197 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500198 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700199 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500200 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500201 if(error && error.status && error.status == 'error'){
202 callback(error);
203 }else{
204 callback(error, true);
205 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500206 }
207 console.log(error);
208 });
209 },
Gunnar Mills32581cf2018-03-16 15:52:54 -0500210 testPassword: function(username, password){
211 // Calls /login without the current session to verify the given password is correct
212 // ignore the interceptor logout on a bad password
213 DataService.ignoreHttpError = true;
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500214 return $http({
Gunnar Mills32581cf2018-03-16 15:52:54 -0500215 method: 'POST',
216 url: DataService.getHost() + "/login",
217 headers: {
218 'Accept': 'application/json',
219 'Content-Type': 'application/json'
220 },
221 withCredentials: false,
222 data: JSON.stringify({"data": [username, password]})
223 }).then(function(response){
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500224 return response.data;
Gunnar Mills32581cf2018-03-16 15:52:54 -0500225 });
Gunnar Mills32581cf2018-03-16 15:52:54 -0500226 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500227 logout: function(callback){
228 $http({
229 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500230 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500231 headers: {
232 'Accept': 'application/json',
233 'Content-Type': 'application/json'
234 },
235 withCredentials: true,
236 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700237 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500238 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600239 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500240 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700241 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500242 if(callback){
243 callback(null, error);
244 }
245 console.log(error);
246 });
247 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500248 changePassword: function(user, newPassword){
249 var deferred = $q.defer();
250 $http({
251 method: 'POST',
252 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
253 headers: {
254 'Accept': 'application/json',
255 'Content-Type': 'application/json'
256 },
257 withCredentials: true,
258 data: JSON.stringify({"data": [newPassword]}),
259 responseType: 'arraybuffer'
260 }).then(function(response, status, headers){
261 deferred.resolve({
262 data: response,
263 status: status,
264 headers: headers
265 });
266 }, function(error){
267 console.log(error);
268 deferred.reject(error);
269 });
270 return deferred.promise;
271 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500272 chassisPowerOn: function(callback){
273 $http({
274 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500275 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500276 headers: {
277 'Accept': 'application/json',
278 'Content-Type': 'application/json'
279 },
280 withCredentials: true,
281 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700282 }).then(function(response){
283 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500284 var content = JSON.parse(json);
285 if(callback){
286 return callback(content.data.CurrentPowerState);
287 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700288 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500289 if(callback){
290 callback(error);
291 }else{
292 console.log(error);
293 }
294 });
295 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600296 chassisPowerOff: function(){
297 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500298 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600299 method: 'PUT',
300 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500301 headers: {
302 'Accept': 'application/json',
303 'Content-Type': 'application/json'
304 },
305 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600306 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700307 }).then(function(response){
308 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500309 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600310 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700311 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600312 console.log(error);
313 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500314 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600315 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500316 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500317 setLEDState: function(state, callback){
318 $http({
319 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500320 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500321 headers: {
322 'Accept': 'application/json',
323 'Content-Type': 'application/json'
324 },
325 withCredentials: true,
326 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700327 }).then(function(response){
328 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500329 var content = JSON.parse(json);
330 if(callback){
331 return callback(content.status);
332 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700333 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500334 if(callback){
335 callback(error);
336 }else{
337 console.log(error);
338 }
339 });
340 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500341 bmcReboot: function(callback){
342 $http({
343 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500344 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500345 headers: {
346 'Accept': 'application/json',
347 'Content-Type': 'application/json'
348 },
349 withCredentials: true,
350 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700351 }).then(function(response){
352 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500353 var content = JSON.parse(json);
354 if(callback){
355 return callback(content.status);
356 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700357 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500358 if(callback){
359 callback(error);
360 }else{
361 console.log(error);
362 }
363 });
364 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600365 hostPowerOn: function(){
366 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500367 $http({
368 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500369 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500370 headers: {
371 'Accept': 'application/json',
372 'Content-Type': 'application/json'
373 },
374 withCredentials: true,
375 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700376 }).then(function(response){
377 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500378 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600379 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700380 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600381 console.log(error);
382 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500383 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600384 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500385 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600386 hostPowerOff: function(){
387 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500388 $http({
389 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500390 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500391 headers: {
392 'Accept': 'application/json',
393 'Content-Type': 'application/json'
394 },
395 withCredentials: true,
396 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700397 }).then(function(response){
398 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500399 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600400 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700401 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600402 console.log(error);
403 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500404 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600405 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500406 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600407 hostReboot: function(){
408 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500409 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600410 method: 'PUT',
411 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500412 headers: {
413 'Accept': 'application/json',
414 'Content-Type': 'application/json'
415 },
416 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600417 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700418 }).then(function(response){
419 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500420 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600421 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700422 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600423 console.log(error);
424 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500425 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600426
427 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500428 },
429 hostShutdown: function(callback){
430 $http({
431 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500432 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500433 headers: {
434 'Accept': 'application/json',
435 'Content-Type': 'application/json'
436 },
437 withCredentials: true,
438 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700439 }).then(function(response){
440 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500441 var content = JSON.parse(json);
442 if(callback){
443 return callback(content);
444 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700445 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500446 if(callback){
447 callback(error);
448 }else{
449 console.log(error);
450 }
451 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500452 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500453 getLogs: function(){
454 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500455 $http({
456 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500457 url: DataService.getHost() + "/xyz/openbmc_project/logging/enumerate",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500458 headers: {
459 'Accept': 'application/json',
460 'Content-Type': 'application/json'
461 },
462 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700463 }).then(function(response){
464 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500465 var content = JSON.parse(json);
466 var dataClone = JSON.parse(JSON.stringify(content.data));
467 var data = [];
468 var severityCode = '';
469 var priority = '';
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500470 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500471 var relatedItems = [];
472
473 for(var key in content.data){
474 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
475 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500476 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500477 severityCode = content.data[key].Severity.split(".").pop();
478 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
479 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500480 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
481 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500482 relatedItems = [];
483 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500484 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500485 });
486
487 data.push(Object.assign({
488 path: key,
489 copied: false,
490 priority: priority,
491 severity_code: severityCode,
492 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500493 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500494 additional_data: content.data[key].AdditionalData.join("\n"),
Gunnar Mills43a2ed12018-02-08 15:42:30 -0600495 type: content.data[key].Message,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500496 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500497 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500498 meta: false,
499 confirm: false,
500 related_items: relatedItems,
501 data: {key: key, value: content.data[key]}
502 }, content.data[key]));
503 }
504 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500505 deferred.resolve({data: data, original: dataClone});
Ed Tanousbbcf6702017-10-06 13:53:06 -0700506 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500507 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500508 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500509 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500510
511 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500512 },
513 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500514 $http({
515 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500516 url: DataService.getHost() + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500517 headers: {
518 'Accept': 'application/json',
519 'Content-Type': 'application/json'
520 },
521 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700522 }).then(function(response){
523 var json = JSON.stringify(response.data);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500524 var content = JSON.parse(json);
525 var dataClone = JSON.parse(JSON.stringify(content.data));
526 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500527 var severity = {};
528 var title = "";
529 var tempKeyParts = [];
530 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500531 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500532
533 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500534 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
535
Gunnar Millseedefd32018-02-28 17:02:34 -0600536 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500537 reading.Value < reading.CriticalLow
538 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500539 severityFlags.critical = true;
540 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500541 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600542 }else if(reading.hasOwnProperty('CriticalHigh') &&
543 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500544 ){
545 severityFlags.critical = true;
546 severityText = 'critical';
547 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600548 }else if(reading.hasOwnProperty('CriticalLow') &&
549 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500550 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500551 severityFlags.warning = true;
552 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500553 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600554 }else if(reading.hasOwnProperty('WarningHigh') &&
555 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500556 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
557 severityFlags.warning = true;
558 severityText = 'warning';
559 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500560 }else{
561 severityFlags.normal = true;
562 severityText = 'normal';
563 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500564 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500565 }
566
567 for(var key in content.data){
568 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500569
570 severity = getSensorStatus(content.data[key]);
571
572 if(!content.data[key].hasOwnProperty('CriticalLow')){
573 content.data[key].CriticalLow = "--";
574 content.data[key].CriticalHigh = "--";
575 }
576
577 if(!content.data[key].hasOwnProperty('WarningLow')){
578 content.data[key].WarningLow = "--";
579 content.data[key].WarningHigh = "--";
580 }
581
582 tempKeyParts = key.split("/");
583 title = tempKeyParts.pop();
584 title = tempKeyParts.pop() + '_' + title;
585 title = title.split("_").map(function(item){
586 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
587 }).reduce(function(prev, el){
588 return prev + " " + el;
589 });
590
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500591 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600592 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
593 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
594 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
595 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500596 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
597 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
598 }else{
599 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
600 }
601
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500602 sensorData.push(Object.assign({
603 path: key,
604 selected: false,
605 confirm: false,
606 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500607 title: title,
608 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
609 severity_flags: severity.flags,
610 status: severity.severityText,
611 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500612 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600613 search_text: (title + " " + content.data[key].Value + " " +
614 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
615 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500616 content.data[key].CriticalLow + " " +
617 content.data[key].CriticalHigh + " " +
618 content.data[key].WarningLow + " " +
619 content.data[key].WarningHigh + " "
620 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500621 original_data: {key: key, value: content.data[key]}
622 }, content.data[key]));
623 }
624 }
625
Iftekharul Islam8947e702017-07-27 10:28:07 -0500626 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700627 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500628 console.log(error);
629 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500630 },
Gunnar Mills033025f2018-03-06 14:49:40 -0600631 getActivation: function(imageId){
632 return $http({
633 method: 'GET',
634 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Activation",
635 headers: {
636 'Accept': 'application/json',
637 'Content-Type': 'application/json'
638 },
639 withCredentials: true
640 }).then(function(response){
641 return response.data;
642 });
643 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500644 getFirmwares: function(){
645 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500646 $http({
647 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500648 url: DataService.getHost() + "/xyz/openbmc_project/software/enumerate",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500649 headers: {
650 'Accept': 'application/json',
651 'Content-Type': 'application/json'
652 },
653 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700654 }).then(function(response){
655 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500656 var content = JSON.parse(json);
657 var data = [];
Gunnar Mills902c38c2018-02-23 10:12:39 -0600658 var activationStatus = "";
Iftekharul Islamc0161392017-06-14 15:46:15 -0500659 var isExtended = false;
660 var bmcActiveVersion = "";
661 var hostActiveVersion = "";
662 var imageType = "";
663 var extendedVersions = [];
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600664 var functionalImages = [];
Iftekharul Islamc0161392017-06-14 15:46:15 -0500665
666 function getFormatedExtendedVersions(extendedVersion){
667 var versions = [];
668 extendedVersion = extendedVersion.split(",");
669
670 extendedVersion.forEach(function(item){
671 var parts = item.split("-");
672 var numberIndex = 0;
673 for(var i = 0; i < parts.length; i++){
674 if(/[0-9]/.test(parts[i])){
675 numberIndex = i;
676 break;
677 }
678 }
679 var titlePart = parts.splice(0, numberIndex);
680 titlePart = titlePart.join("");
681 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
682 var versionPart = parts.join("-");
683 versions.push({
684 title: titlePart,
685 version: versionPart
686 });
687 });
688
689 return versions;
690 }
691
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600692 // Get the list of functional images so we can compare
693 // later if an image is functional
694 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH])
695 {
696 functionalImages = content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH].endpoints;
697 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500698 for(var key in content.data){
699 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
Gunnar Mills902c38c2018-02-23 10:12:39 -0600700 // If the image is "Functional" use that for the
701 // activation status, else use the value of "Activation"
702 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
703 activationStatus = content.data[key].Activation.split(".").pop();
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600704 if (functionalImages.includes(key))
Gunnar Mills902c38c2018-02-23 10:12:39 -0600705 {
706 activationStatus = "Functional";
707 }
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600708
Iftekharul Islamc0161392017-06-14 15:46:15 -0500709 imageType = content.data[key].Purpose.split(".").pop();
710 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
711 if(isExtended){
712 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
713 }
714 data.push(Object.assign({
715 path: key,
Gunnar Mills902c38c2018-02-23 10:12:39 -0600716 activationStatus: activationStatus,
Iftekharul Islamc0161392017-06-14 15:46:15 -0500717 imageId: key.split("/").pop(),
718 imageType: imageType,
719 isExtended: isExtended,
720 extended: {
721 show: false,
722 versions: extendedVersions
723 },
724 data: {key: key, value: content.data[key]}
725 }, content.data[key]));
726
Gunnar Mills902c38c2018-02-23 10:12:39 -0600727 if(activationStatus == 'Functional' && imageType == 'BMC'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500728 bmcActiveVersion = content.data[key].Version;
729 }
730
Gunnar Mills902c38c2018-02-23 10:12:39 -0600731 if(activationStatus == 'Functional' && imageType == 'Host'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500732 hostActiveVersion = content.data[key].Version;
733 }
734 }
735 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500736
737 deferred.resolve({
Gunnar Millseedefd32018-02-28 17:02:34 -0600738 data: data,
739 bmcActiveVersion: bmcActiveVersion,
Michael Davisdf3bd122017-08-10 11:03:42 -0500740 hostActiveVersion: hostActiveVersion
741 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700742 }, function(error){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500743 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500744 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500745 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500746
747 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500748 },
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500749 changePriority: function(imageId, priority){
750 var deferred = $q.defer();
751 $http({
752 method: 'PUT',
753 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Priority",
754 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500755 'Accept': 'application/json',
756 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500757 },
758 withCredentials: true,
759 data: JSON.stringify({"data": priority})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700760 }).then(function(response){
761 var json = JSON.stringify(response.data);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500762 var content = JSON.parse(json);
763 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700764 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500765 console.log(error);
766 deferred.reject(error);
767 });
768
769 return deferred.promise;
770 },
Iftekharul Islam2a489552017-11-02 13:23:08 -0500771 deleteImage: function(imageId){
772 var deferred = $q.defer();
773 $http({
774 method: 'POST',
775 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/action/Delete",
776 headers: {
777 'Accept': 'application/json',
778 'Content-Type': 'application/json'
779 },
780 withCredentials: true,
781 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700782 }).then(function(response){
783 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500784 var content = JSON.parse(json);
785 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700786 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500787 console.log(error);
788 deferred.reject(error);
789 });
790
791 return deferred.promise;
792 },
793 activateImage: function(imageId){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500794 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500795 $http({
796 method: 'PUT',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500797 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/RequestedActivation",
798 headers: {
799 'Accept': 'application/json',
800 'Content-Type': 'application/json'
801 },
802 withCredentials: true,
803 data: JSON.stringify({"data": Constants.FIRMWARE.ACTIVATE_FIRMWARE})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700804 }).then(function(response){
805 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500806 var content = JSON.parse(json);
807 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700808 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500809 console.log(error);
810 deferred.reject(error);
811 });
812
813 return deferred.promise;
814 },
815 uploadImage: function(file){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500816 return $http({
Iftekharul Islam2a489552017-11-02 13:23:08 -0500817 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500818 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600819 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500820 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500821 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500822 },
823 withCredentials: true,
824 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700825 }).then(function(response){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500826 return response.data;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500827 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500828 },
829 downloadImage: function(host, filename){
Gunnar Mills36379b92018-04-02 16:53:53 -0500830 return $http({
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500831 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600832 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500833 headers: {
Gunnar Mills36379b92018-04-02 16:53:53 -0500834 'Accept': 'application/json',
835 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500836 },
837 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600838 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500839 responseType: 'arraybuffer'
Gunnar Mills36379b92018-04-02 16:53:53 -0500840 }).then(function(response){
841 return response.data;
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500842 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500843 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500844 getBMCEthernetInfo: function(){
845 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500846 $http({
847 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500848 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500849 headers: {
850 'Accept': 'application/json',
851 'Content-Type': 'application/json'
852 },
853 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700854 }).then(function(response){
855 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500856 var content = JSON.parse(json);
857 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700858 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500859 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500860 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500861 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500862
863 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500864 },
865 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500866 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500867 $http({
868 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500869 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500870 headers: {
871 'Accept': 'application/json',
872 'Content-Type': 'application/json'
873 },
874 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700875 }).then(function(response){
876 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500877 var content = JSON.parse(json);
878 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700879 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500880 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500881 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500882 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500883 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500884 },
Gunnar Mills17708f22018-04-13 14:21:31 -0500885 getServerInfo: function(){
Gunnar Mills5ea75752018-04-19 16:07:10 -0500886 // TODO: openbmc/openbmc#3117 Need a way via REST to get
887 // interfaces so we can get the system object(s) by the looking
888 // for the system interface.
Gunnar Mills17708f22018-04-13 14:21:31 -0500889 return $http({
890 method: 'GET',
891 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system",
892 headers: {
893 'Accept': 'application/json',
894 'Content-Type': 'application/json'
895 },
896 withCredentials: true
897 }).then(function(response){
898 return response.data;
899 });
900 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500901 getHardwares: function(callback){
902 $http({
903 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500904 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500905 headers: {
906 'Accept': 'application/json',
907 'Content-Type': 'application/json'
908 },
909 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700910 }).then(function(response){
911 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500912 var content = JSON.parse(json);
913 var hardwareData = [];
914 var keyIndexMap = {};
915 var title = "";
916 var data = [];
917 var searchText = "";
918 var componentIndex = -1;
919 var tempParts = [];
920
921
922 function isSubComponent(key){
923
924 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
925 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
926 }
927
928 return false;
929 }
930
931 function titlelize(title){
932 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
933 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
934 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
935 return title.toUpperCase();
936 }
937 }
938
939 return title;
940 }
941
942 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500943 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500944 for(var key in obj){
945 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
946 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500947 value = obj[key];
948 if(value == 1 || value == 0){
949 value = (value == 1) ? 'Yes' : 'No';
950 }
951 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500952 }
953 }
954
955 return transformed;
956 }
957
958 function getSearchText(data){
959 var searchText = "";
960 for(var i = 0; i < data.length; i++){
961 searchText += " " + data[i].key + " " + data[i].value;
962 }
963
Gunnar Millseedefd32018-02-28 17:02:34 -0600964 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500965 }
966
967 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600968 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500969 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
970
971 data = camelcaseToLabel(content.data[key]);
972 searchText = getSearchText(data);
973 title = key.split("/").pop();
974
975 title = titlelize(title);
976
977 if(!isSubComponent(key)){
978 hardwareData.push(Object.assign({
979 path: key,
980 title: title,
981 selected: false,
982 expanded: false,
983 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600984 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500985 original_data: {key: key, value: content.data[key]}
986 }, {items: data}));
987
988 keyIndexMap[key] = hardwareData.length - 1;
989 }else{
990 var tempParts = key.split("/");
991 tempParts.pop();
992 tempParts = tempParts.join("/");
993 componentIndex = keyIndexMap[tempParts];
994 data = content.data[key];
995 data.title = title;
996 hardwareData[componentIndex].sub_components.push(data);
997 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
Gunnar Millscdd9d6b2018-03-09 11:57:06 -0600998
999 // Sort the subcomponents alphanumeric so they are displayed on the
1000 // inventory page in order (e.g. core 0, core 1, core 2, ... core 12, core 13)
1001 hardwareData[componentIndex].sub_components.sort(function (a, b) {
1002 return a.title.localeCompare(b.title, 'en', { numeric: true });
1003 });
Iftekharul Islamee27d752017-07-05 15:54:31 -05001004 }
1005 }
1006 }
1007
1008 if(callback){
1009 callback(hardwareData, content.data);
1010 }else{
1011 return { data: hardwareData, original_data: content.data};
1012 }
1013 });
1014 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001015 deleteLogs: function(logs) {
1016 var defer = $q.defer();
1017 var promises = [];
1018
1019 function finished(){
1020 defer.resolve();
1021 }
1022
1023 logs.forEach(function(item){
1024 promises.push($http({
1025 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001026 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001027 headers: {
1028 'Accept': 'application/json',
1029 'Content-Type': 'application/json'
1030 },
1031 withCredentials: true,
1032 data: JSON.stringify({"data": []})
1033 }));
1034 });
1035
1036 $q.all(promises).then(finished);
1037
1038 return defer.promise;
1039 },
1040 resolveLogs: function(logs) {
1041 var defer = $q.defer();
1042 var promises = [];
1043
1044 function finished(){
1045 defer.resolve();
1046 }
1047
1048 logs.forEach(function(item){
1049 promises.push($http({
1050 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001051 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001052 headers: {
1053 'Accept': 'application/json',
1054 'Content-Type': 'application/json'
1055 },
1056 withCredentials: true,
1057 data: JSON.stringify({"data": "1"})
1058 }));
1059 });
1060
1061 $q.all(promises).then(finished);
1062
1063 return defer.promise;
1064 },
CamVan Nguyen33275832018-03-13 18:38:37 -05001065 getPowerConsumption: function(){
1066 return $http({
1067 method: 'GET',
1068 url: DataService.getHost() + "/xyz/openbmc_project/sensors/power/total_power",
1069 headers: {
1070 'Accept': 'application/json',
1071 'Content-Type': 'application/json'
1072 },
1073 withCredentials: true
1074 }).then(function(response){
1075 var json = JSON.stringify(response.data);
1076 var content = JSON.parse(json);
1077
1078 return getScaledValue(content.data.Value,
1079 content.data.Scale) + ' ' +
1080 Constants.POWER_CONSUMPTION_TEXT[content.data.Unit];
1081 }, function(error){
1082 if ('Not Found' == error.statusText) {
1083 return Constants.POWER_CONSUMPTION_TEXT.notavailable;
1084 } else {
1085 console.log(error);
1086 }
1087 });
1088 },
1089 getPowerCap: function(){
1090 return $http({
1091 method: 'GET',
1092 url: DataService.getHost() + "/xyz/openbmc_project/control/host0/power_cap",
1093 headers: {
1094 'Accept': 'application/json',
1095 'Content-Type': 'application/json'
1096 },
1097 withCredentials: true
1098 }).then(function(response){
1099 var json = JSON.stringify(response.data);
1100 var content = JSON.parse(json);
1101
1102 return (false == content.data.PowerCapEnable) ?
1103 Constants.POWER_CAP_TEXT.disabled :
1104 content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
1105 }, function(error){
1106 console.log(error);
1107 });
1108 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001109 };
1110 return SERVICE;
1111 }]);
1112
1113 })(window.angular);