blob: fcd873c1c00239f9c46074fbb8489aa44cea25ad [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
Iftekharul Islam99d199f2017-03-24 15:28:25 -05007 */
8
9window.angular && (function (angular) {
10 'use strict';
11 angular
12 .module('app.common.services')
Iftekharul Islam1acb4122017-11-02 13:20:32 -050013 .factory('APIUtils', ['$http', 'Constants', '$q', 'dataService',function($http, Constants, $q, DataService){
CamVan Nguyen33275832018-03-13 18:38:37 -050014 var getScaledValue = function(value, scale){
15 scale = scale + "";
16 scale = parseInt(scale, 10);
17 var power = Math.abs(parseInt(scale,10));
18
19 if(scale > 0){
20 value = value * Math.pow(10, power);
21 }else if(scale < 0){
22 value = value / Math.pow(10, power);
23 }
24 return value;
25 };
Iftekharul Islam99d199f2017-03-24 15:28:25 -050026 var SERVICE = {
Iftekharul Islam99d199f2017-03-24 15:28:25 -050027 API_CREDENTIALS: Constants.API_CREDENTIALS,
28 API_RESPONSE: Constants.API_RESPONSE,
29 CHASSIS_POWER_STATE: Constants.CHASSIS_POWER_STATE,
30 HOST_STATE_TEXT: Constants.HOST_STATE,
31 HOST_STATE: Constants.HOST_STATE,
Iftekharul Islamcd789502017-04-19 14:37:55 -050032 LED_STATE: Constants.LED_STATE,
33 LED_STATE_TEXT: Constants.LED_STATE_TEXT,
Iftekharul Islam1acb4122017-11-02 13:20:32 -050034 HOST_SESSION_STORAGE_KEY: Constants.API_CREDENTIALS.host_storage_key,
Iftekharul Islama1d238f2018-02-26 12:29:45 -060035 getChassisState: function(){
36 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050037 $http({
38 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060039 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/CurrentPowerState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050040 headers: {
41 'Accept': 'application/json',
42 'Content-Type': 'application/json'
43 },
44 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070045 }).then(function(response){
46 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050047 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060048 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070049 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050050 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060051 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050052 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060053 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050054 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -060055 getHostState: function(){
56 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -050057 $http({
58 method: 'GET',
Iftekharul Islama1d238f2018-02-26 12:29:45 -060059 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/CurrentHostState",
Iftekharul Islam99d199f2017-03-24 15:28:25 -050060 headers: {
61 'Accept': 'application/json',
62 'Content-Type': 'application/json'
63 },
64 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070065 }).then(function(response){
66 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050067 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060068 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -070069 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -050070 console.log(error);
Iftekharul Islama1d238f2018-02-26 12:29:45 -060071 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -050072 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -060073 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -050074 },
Iftekharul Islam171c6a12017-08-11 08:35:47 -050075 getNetworkInfo: function(){
76 var deferred = $q.defer();
77 $http({
78 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -050079 url: DataService.getHost() + "/xyz/openbmc_project/network/enumerate",
Iftekharul Islam171c6a12017-08-11 08:35:47 -050080 headers: {
81 'Accept': 'application/json',
82 'Content-Type': 'application/json'
83 },
84 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -070085 }).then(function(response){
86 var json = JSON.stringify(response.data);
Iftekharul Islam171c6a12017-08-11 08:35:47 -050087 var content = JSON.parse(json);
88 var hostname = "";
89 var macAddress = "";
90
Iftekharul Islam2a489552017-11-02 13:23:08 -050091 function parseNetworkData(content){
92 var data = {
93 interface_ids: [],
94 interfaces: {
95 }
96 };
97 var interfaceId = '', keyParts = [], interfaceHash = '', interfaceType = '';
98 for(var key in content.data){
99 if(key.match(/network\/eth\d+$/ig)){
100 interfaceId = key.split("/").pop();
101 if(data.interface_ids.indexOf(interfaceId) == -1){
102 data.interface_ids.push(interfaceId);
103 data.interfaces[interfaceId] = {
104 interfaceIname: '',
Gunnar Millsdb44b092018-04-12 13:27:20 -0500105 DomainName:'',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500106 MACAddress:'',
107 Nameservers: [],
108 DHCPEnabled: 0,
109 ipv4:
110 {
111 ids: [],
112 values: []
113 },
114 ipv6:
115 {
116 ids: [],
117 values: []
118 }
119 };
120 data.interfaces[interfaceId].MACAddress = content.data[key].MACAddress;
121 data.interfaces[interfaceId].DomainName = content.data[key].DomainName.join(" ");
122 data.interfaces[interfaceId].Nameservers = content.data[key].Nameservers;
123 data.interfaces[interfaceId].DHCPEnabled = content.data[key].DHCPEnabled;
124 }
125 }else if(key.match(/network\/eth\d+\/ipv[4|6]\/[a-z0-9]+$/ig)){
126 keyParts = key.split("/");
127 interfaceHash = keyParts.pop();
128 interfaceType = keyParts.pop();
129 interfaceId = keyParts.pop();
130
131 if(data.interfaces[interfaceId][interfaceType].ids.indexOf(interfaceHash) == -1){
132 data.interfaces[interfaceId][interfaceType].ids.push(interfaceHash);
133 data.interfaces[interfaceId][interfaceType].values.push(content.data[key]);
134 }
135 }
136 }
137 return data;
138 }
139
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500140 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/config') &&
141 content.data['/xyz/openbmc_project/network/config'].hasOwnProperty('HostName')
142 ){
143 hostname = content.data['/xyz/openbmc_project/network/config'].HostName;
144 }
145
146 if(content.data.hasOwnProperty('/xyz/openbmc_project/network/eth0') &&
147 content.data['/xyz/openbmc_project/network/eth0'].hasOwnProperty('MACAddress')
148 ){
149 macAddress = content.data['/xyz/openbmc_project/network/eth0'].MACAddress;
150 }
151
152 deferred.resolve({
153 data: content.data,
154 hostname: hostname,
155 mac_address: macAddress,
Iftekharul Islam2a489552017-11-02 13:23:08 -0500156 formatted_data: parseNetworkData(content)
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500157 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700158 }, function(error){
Iftekharul Islam171c6a12017-08-11 08:35:47 -0500159 console.log(error);
160 deferred.reject(error);
161 });
162 return deferred.promise;
163 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500164 getLEDState: function(){
165 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500166 $http({
167 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500168 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500169 headers: {
170 'Accept': 'application/json',
171 'Content-Type': 'application/json'
172 },
173 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700174 }).then(function(response){
175 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500176 var content = JSON.parse(json);
177 deferred.resolve(content.data.Asserted);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700178 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500179 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500180 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500181 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500182 return deferred.promise;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500183 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500184 login: function(username, password, callback){
185 $http({
186 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500187 url: DataService.getHost() + "/login",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500188 headers: {
189 'Accept': 'application/json',
190 'Content-Type': 'application/json'
191 },
192 withCredentials: true,
193 data: JSON.stringify({"data": [username, password]})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700194 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500195 if(callback){
Ed Tanousbbcf6702017-10-06 13:53:06 -0700196 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500197 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700198 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500199 if(callback){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500200 if(error && error.status && error.status == 'error'){
201 callback(error);
202 }else{
203 callback(error, true);
204 }
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500205 }
206 console.log(error);
207 });
208 },
Gunnar Mills32581cf2018-03-16 15:52:54 -0500209 testPassword: function(username, password){
210 // Calls /login without the current session to verify the given password is correct
211 // ignore the interceptor logout on a bad password
212 DataService.ignoreHttpError = true;
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500213 return $http({
Gunnar Mills32581cf2018-03-16 15:52:54 -0500214 method: 'POST',
215 url: DataService.getHost() + "/login",
216 headers: {
217 'Accept': 'application/json',
218 'Content-Type': 'application/json'
219 },
220 withCredentials: false,
221 data: JSON.stringify({"data": [username, password]})
222 }).then(function(response){
Gunnar Mills7c3e8c12018-03-28 16:16:58 -0500223 return response.data;
Gunnar Mills32581cf2018-03-16 15:52:54 -0500224 });
Gunnar Mills32581cf2018-03-16 15:52:54 -0500225 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500226 logout: function(callback){
227 $http({
228 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500229 url: DataService.getHost() + "/logout",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500230 headers: {
231 'Accept': 'application/json',
232 'Content-Type': 'application/json'
233 },
234 withCredentials: true,
235 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700236 }).then(function(response){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500237 if(callback){
Iftekharul Islamde883402018-02-05 11:16:21 -0600238 callback(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500239 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700240 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500241 if(callback){
242 callback(null, error);
243 }
244 console.log(error);
245 });
246 },
Gunnar Mills55a8e392018-03-14 15:37:44 -0500247 changePassword: function(user, newPassword){
248 var deferred = $q.defer();
249 $http({
250 method: 'POST',
251 url: DataService.getHost() + "/xyz/openbmc_project/user/" + user + "/action/SetPassword",
252 headers: {
253 'Accept': 'application/json',
254 'Content-Type': 'application/json'
255 },
256 withCredentials: true,
257 data: JSON.stringify({"data": [newPassword]}),
258 responseType: 'arraybuffer'
259 }).then(function(response, status, headers){
260 deferred.resolve({
261 data: response,
262 status: status,
263 headers: headers
264 });
265 }, function(error){
266 console.log(error);
267 deferred.reject(error);
268 });
269 return deferred.promise;
270 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500271 chassisPowerOn: function(callback){
272 $http({
273 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500274 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500275 headers: {
276 'Accept': 'application/json',
277 'Content-Type': 'application/json'
278 },
279 withCredentials: true,
280 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700281 }).then(function(response){
282 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500283 var content = JSON.parse(json);
284 if(callback){
285 return callback(content.data.CurrentPowerState);
286 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700287 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500288 if(callback){
289 callback(error);
290 }else{
291 console.log(error);
292 }
293 });
294 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600295 chassisPowerOff: function(){
296 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500297 $http({
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600298 method: 'PUT',
299 url: DataService.getHost() + "/xyz/openbmc_project/state/chassis0/attr/RequestedPowerTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500300 headers: {
301 'Accept': 'application/json',
302 'Content-Type': 'application/json'
303 },
304 withCredentials: true,
Gunnar Mills3aa8b532018-02-06 15:42:29 -0600305 data: JSON.stringify({"data": "xyz.openbmc_project.State.Chassis.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700306 }).then(function(response){
307 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500308 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600309 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700310 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600311 console.log(error);
312 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500313 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600314 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500315 },
Iftekharul Islamcd789502017-04-19 14:37:55 -0500316 setLEDState: function(state, callback){
317 $http({
318 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500319 url: DataService.getHost() + "/xyz/openbmc_project/led/groups/enclosure_identify/attr/Asserted",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500320 headers: {
321 'Accept': 'application/json',
322 'Content-Type': 'application/json'
323 },
324 withCredentials: true,
325 data: JSON.stringify({"data": state})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700326 }).then(function(response){
327 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500328 var content = JSON.parse(json);
329 if(callback){
330 return callback(content.status);
331 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700332 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500333 if(callback){
334 callback(error);
335 }else{
336 console.log(error);
337 }
338 });
339 },
Iftekharul Islam55368122017-03-27 09:46:50 -0500340 bmcReboot: function(callback){
341 $http({
342 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500343 url: DataService.getHost() + "/xyz/openbmc_project/state/bmc0/attr/RequestedBmcTransition",
Iftekharul Islam55368122017-03-27 09:46:50 -0500344 headers: {
345 'Accept': 'application/json',
346 'Content-Type': 'application/json'
347 },
348 withCredentials: true,
349 data: JSON.stringify({"data": "xyz.openbmc_project.State.BMC.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700350 }).then(function(response){
351 var json = JSON.stringify(response.data);
Iftekharul Islam55368122017-03-27 09:46:50 -0500352 var content = JSON.parse(json);
353 if(callback){
354 return callback(content.status);
355 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700356 }, function(error){
Iftekharul Islam55368122017-03-27 09:46:50 -0500357 if(callback){
358 callback(error);
359 }else{
360 console.log(error);
361 }
362 });
363 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600364 hostPowerOn: function(){
365 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500366 $http({
367 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500368 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500369 headers: {
370 'Accept': 'application/json',
371 'Content-Type': 'application/json'
372 },
373 withCredentials: true,
374 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.On"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700375 }).then(function(response){
376 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500377 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600378 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700379 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600380 console.log(error);
381 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500382 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600383 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500384 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600385 hostPowerOff: function(){
386 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500387 $http({
388 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500389 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500390 headers: {
391 'Accept': 'application/json',
392 'Content-Type': 'application/json'
393 },
394 withCredentials: true,
395 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Off"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700396 }).then(function(response){
397 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500398 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600399 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700400 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600401 console.log(error);
402 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500403 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600404 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500405 },
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600406 hostReboot: function(){
407 var deferred = $q.defer();
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500408 $http({
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600409 method: 'PUT',
410 url: DataService.getHost() + "/xyz/openbmc_project/state/host0/attr/RequestedHostTransition",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500411 headers: {
412 'Accept': 'application/json',
413 'Content-Type': 'application/json'
414 },
415 withCredentials: true,
Gunnar Millscacfa6d2018-02-07 12:09:02 -0600416 data: JSON.stringify({"data": "xyz.openbmc_project.State.Host.Transition.Reboot"})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700417 }).then(function(response){
418 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500419 var content = JSON.parse(json);
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600420 deferred.resolve(content.status);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700421 }, function(error){
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600422 console.log(error);
423 deferred.reject(error);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500424 });
Iftekharul Islama1d238f2018-02-26 12:29:45 -0600425
426 return deferred.promise;
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500427 },
428 hostShutdown: function(callback){
429 $http({
430 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500431 url: DataService.getHost() + "/xyz/openbmc_project/state/host0",
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500432 headers: {
433 'Accept': 'application/json',
434 'Content-Type': 'application/json'
435 },
436 withCredentials: true,
437 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700438 }).then(function(response){
439 var json = JSON.stringify(response.data);
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500440 var content = JSON.parse(json);
441 if(callback){
442 return callback(content);
443 }
Ed Tanousbbcf6702017-10-06 13:53:06 -0700444 }, function(error){
Iftekharul Islam99d199f2017-03-24 15:28:25 -0500445 if(callback){
446 callback(error);
447 }else{
448 console.log(error);
449 }
450 });
Iftekharul Islamcd789502017-04-19 14:37:55 -0500451 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500452 getLogs: function(){
453 var deferred = $q.defer();
Iftekharul Islamcd789502017-04-19 14:37:55 -0500454 $http({
455 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500456 url: DataService.getHost() + "/xyz/openbmc_project/logging/enumerate",
Iftekharul Islamcd789502017-04-19 14:37:55 -0500457 headers: {
458 'Accept': 'application/json',
459 'Content-Type': 'application/json'
460 },
461 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700462 }).then(function(response){
463 var json = JSON.stringify(response.data);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500464 var content = JSON.parse(json);
465 var dataClone = JSON.parse(JSON.stringify(content.data));
466 var data = [];
467 var severityCode = '';
468 var priority = '';
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500469 var health = '';
Iftekharul Islamcd789502017-04-19 14:37:55 -0500470 var relatedItems = [];
471
472 for(var key in content.data){
473 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Id')){
474 var severityFlags = {low: false, medium: false, high: false};
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500475 var healthFlags = {critical: false, warning: false, good: false};
Iftekharul Islamcd789502017-04-19 14:37:55 -0500476 severityCode = content.data[key].Severity.split(".").pop();
477 priority = Constants.SEVERITY_TO_PRIORITY_MAP[severityCode];
478 severityFlags[priority.toLowerCase()] = true;
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500479 health = Constants.SEVERITY_TO_HEALTH_MAP[severityCode];
480 healthFlags[health.toLowerCase()] = true;
Iftekharul Islamcd789502017-04-19 14:37:55 -0500481 relatedItems = [];
482 content.data[key].associations.forEach(function(item){
Iftekharul Islam532763f2017-04-25 09:44:40 -0500483 relatedItems.push(item[2]);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500484 });
485
486 data.push(Object.assign({
487 path: key,
488 copied: false,
489 priority: priority,
490 severity_code: severityCode,
491 severity_flags: severityFlags,
Iftekharul Islamec6bcd12017-09-06 10:49:07 -0500492 health_flags: healthFlags,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500493 additional_data: content.data[key].AdditionalData.join("\n"),
Gunnar Mills43a2ed12018-02-08 15:42:30 -0600494 type: content.data[key].Message,
Iftekharul Islamcd789502017-04-19 14:37:55 -0500495 selected: false,
Iftekharul Islam8b4828a2017-04-19 14:37:55 -0500496 search_text: ("#" + content.data[key].Id + " " + severityCode + " " + content.data[key].Severity + " " + content.data[key].AdditionalData.join(" ")).toLowerCase(),
Iftekharul Islamcd789502017-04-19 14:37:55 -0500497 meta: false,
498 confirm: false,
499 related_items: relatedItems,
500 data: {key: key, value: content.data[key]}
501 }, content.data[key]));
502 }
503 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500504 deferred.resolve({data: data, original: dataClone});
Ed Tanousbbcf6702017-10-06 13:53:06 -0700505 }, function(error){
Iftekharul Islamcd789502017-04-19 14:37:55 -0500506 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500507 deferred.reject(error);
Iftekharul Islamcd789502017-04-19 14:37:55 -0500508 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500509
510 return deferred.promise;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500511 },
512 getAllSensorStatus: function(callback){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500513 $http({
514 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500515 url: DataService.getHost() + "/xyz/openbmc_project/sensors/enumerate",
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500516 headers: {
517 'Accept': 'application/json',
518 'Content-Type': 'application/json'
519 },
520 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700521 }).then(function(response){
522 var json = JSON.stringify(response.data);
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500523 var content = JSON.parse(json);
524 var dataClone = JSON.parse(JSON.stringify(content.data));
525 var sensorData = [];
Iftekharul Islam8947e702017-07-27 10:28:07 -0500526 var severity = {};
527 var title = "";
528 var tempKeyParts = [];
529 var order = 0;
Iftekharul Islam8a122842017-09-11 10:58:16 -0500530 var customOrder = 0;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500531
532 function getSensorStatus(reading){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500533 var severityFlags = {critical: false, warning: false, normal: false}, severityText = '', order = 0;
534
Gunnar Millseedefd32018-02-28 17:02:34 -0600535 if(reading.hasOwnProperty('CriticalLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500536 reading.Value < reading.CriticalLow
537 ){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500538 severityFlags.critical = true;
539 severityText = 'critical';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500540 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600541 }else if(reading.hasOwnProperty('CriticalHigh') &&
542 reading.Value > reading.CriticalHigh
Iftekharul Islam8947e702017-07-27 10:28:07 -0500543 ){
544 severityFlags.critical = true;
545 severityText = 'critical';
546 order = 2;
Gunnar Millseedefd32018-02-28 17:02:34 -0600547 }else if(reading.hasOwnProperty('CriticalLow') &&
548 reading.hasOwnProperty('WarningLow') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500549 reading.Value >= reading.CriticalLow && reading.Value <= reading.WarningLow){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500550 severityFlags.warning = true;
551 severityText = 'warning';
Iftekharul Islam8947e702017-07-27 10:28:07 -0500552 order = 1;
Gunnar Millseedefd32018-02-28 17:02:34 -0600553 }else if(reading.hasOwnProperty('WarningHigh') &&
554 reading.hasOwnProperty('CriticalHigh') &&
Iftekharul Islam8947e702017-07-27 10:28:07 -0500555 reading.Value >= reading.WarningHigh && reading.Value <= reading.CriticalHigh){
556 severityFlags.warning = true;
557 severityText = 'warning';
558 order = 1;
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500559 }else{
560 severityFlags.normal = true;
561 severityText = 'normal';
562 }
Iftekharul Islam8947e702017-07-27 10:28:07 -0500563 return { flags: severityFlags, severityText: severityText, order: order};
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500564 }
565
566 for(var key in content.data){
567 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Unit')){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500568
569 severity = getSensorStatus(content.data[key]);
570
571 if(!content.data[key].hasOwnProperty('CriticalLow')){
572 content.data[key].CriticalLow = "--";
573 content.data[key].CriticalHigh = "--";
574 }
575
576 if(!content.data[key].hasOwnProperty('WarningLow')){
577 content.data[key].WarningLow = "--";
578 content.data[key].WarningHigh = "--";
579 }
580
581 tempKeyParts = key.split("/");
582 title = tempKeyParts.pop();
583 title = tempKeyParts.pop() + '_' + title;
584 title = title.split("_").map(function(item){
585 return item.toLowerCase().charAt(0).toUpperCase() + item.slice(1);
586 }).reduce(function(prev, el){
587 return prev + " " + el;
588 });
589
Iftekharul Islam96bbf312017-08-22 13:44:38 -0500590 content.data[key].Value = getScaledValue(content.data[key].Value, content.data[key].Scale);
Gunnar Mills022f5642018-02-07 14:30:17 -0600591 content.data[key].CriticalLow = getScaledValue(content.data[key].CriticalLow, content.data[key].Scale);
592 content.data[key].CriticalHigh = getScaledValue(content.data[key].CriticalHigh, content.data[key].Scale);
593 content.data[key].WarningLow = getScaledValue(content.data[key].WarningLow, content.data[key].Scale);
594 content.data[key].WarningHigh = getScaledValue(content.data[key].WarningHigh, content.data[key].Scale);
Iftekharul Islam8a122842017-09-11 10:58:16 -0500595 if(Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit) > -1){
596 customOrder = Constants.SENSOR_SORT_ORDER.indexOf(content.data[key].Unit);
597 }else{
598 customOrder = Constants.SENSOR_SORT_ORDER_DEFAULT;
599 }
600
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500601 sensorData.push(Object.assign({
602 path: key,
603 selected: false,
604 confirm: false,
605 copied: false,
Iftekharul Islam8947e702017-07-27 10:28:07 -0500606 title: title,
607 unit: Constants.SENSOR_UNIT_MAP[content.data[key].Unit],
608 severity_flags: severity.flags,
609 status: severity.severityText,
610 order: severity.order,
Iftekharul Islam8a122842017-09-11 10:58:16 -0500611 custom_order: customOrder,
Gunnar Millseedefd32018-02-28 17:02:34 -0600612 search_text: (title + " " + content.data[key].Value + " " +
613 Constants.SENSOR_UNIT_MAP[content.data[key].Unit] + " " +
614 severity.severityText + " " +
Iftekharul Islam8947e702017-07-27 10:28:07 -0500615 content.data[key].CriticalLow + " " +
616 content.data[key].CriticalHigh + " " +
617 content.data[key].WarningLow + " " +
618 content.data[key].WarningHigh + " "
619 ).toLowerCase(),
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500620 original_data: {key: key, value: content.data[key]}
621 }, content.data[key]));
622 }
623 }
624
Iftekharul Islam8947e702017-07-27 10:28:07 -0500625 callback(sensorData, dataClone);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700626 }, function(error){
Iftekharul Islamd2269e22017-05-02 09:32:45 -0500627 console.log(error);
628 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500629 },
Gunnar Mills033025f2018-03-06 14:49:40 -0600630 getActivation: function(imageId){
631 return $http({
632 method: 'GET',
633 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Activation",
634 headers: {
635 'Accept': 'application/json',
636 'Content-Type': 'application/json'
637 },
638 withCredentials: true
639 }).then(function(response){
640 return response.data;
641 });
642 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500643 getFirmwares: function(){
644 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500645 $http({
646 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500647 url: DataService.getHost() + "/xyz/openbmc_project/software/enumerate",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500648 headers: {
649 'Accept': 'application/json',
650 'Content-Type': 'application/json'
651 },
652 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700653 }).then(function(response){
654 var json = JSON.stringify(response.data);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500655 var content = JSON.parse(json);
656 var data = [];
Gunnar Mills902c38c2018-02-23 10:12:39 -0600657 var activationStatus = "";
Iftekharul Islamc0161392017-06-14 15:46:15 -0500658 var isExtended = false;
659 var bmcActiveVersion = "";
660 var hostActiveVersion = "";
661 var imageType = "";
662 var extendedVersions = [];
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600663 var functionalImages = [];
Iftekharul Islamc0161392017-06-14 15:46:15 -0500664
665 function getFormatedExtendedVersions(extendedVersion){
666 var versions = [];
667 extendedVersion = extendedVersion.split(",");
668
669 extendedVersion.forEach(function(item){
670 var parts = item.split("-");
671 var numberIndex = 0;
672 for(var i = 0; i < parts.length; i++){
673 if(/[0-9]/.test(parts[i])){
674 numberIndex = i;
675 break;
676 }
677 }
678 var titlePart = parts.splice(0, numberIndex);
679 titlePart = titlePart.join("");
680 titlePart = titlePart[0].toUpperCase() + titlePart.substr(1, titlePart.length);
681 var versionPart = parts.join("-");
682 versions.push({
683 title: titlePart,
684 version: versionPart
685 });
686 });
687
688 return versions;
689 }
690
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600691 // Get the list of functional images so we can compare
692 // later if an image is functional
693 if (content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH])
694 {
695 functionalImages = content.data[Constants.FIRMWARE.FUNCTIONAL_OBJPATH].endpoints;
696 }
Iftekharul Islamc0161392017-06-14 15:46:15 -0500697 for(var key in content.data){
698 if(content.data.hasOwnProperty(key) && content.data[key].hasOwnProperty('Version')){
Gunnar Mills902c38c2018-02-23 10:12:39 -0600699 // If the image is "Functional" use that for the
700 // activation status, else use the value of "Activation"
701 // github.com/openbmc/phosphor-dbus-interfaces/blob/master/xyz/openbmc_project/Software/Activation.interface.yaml
702 activationStatus = content.data[key].Activation.split(".").pop();
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600703 if (functionalImages.includes(key))
Gunnar Mills902c38c2018-02-23 10:12:39 -0600704 {
705 activationStatus = "Functional";
706 }
Gunnar Mills9b733bd2018-02-23 21:16:20 -0600707
Iftekharul Islamc0161392017-06-14 15:46:15 -0500708 imageType = content.data[key].Purpose.split(".").pop();
709 isExtended = content.data[key].hasOwnProperty('ExtendedVersion') && content.data[key].ExtendedVersion != "";
710 if(isExtended){
711 extendedVersions = getFormatedExtendedVersions(content.data[key].ExtendedVersion);
712 }
713 data.push(Object.assign({
714 path: key,
Gunnar Mills902c38c2018-02-23 10:12:39 -0600715 activationStatus: activationStatus,
Iftekharul Islamc0161392017-06-14 15:46:15 -0500716 imageId: key.split("/").pop(),
717 imageType: imageType,
718 isExtended: isExtended,
719 extended: {
720 show: false,
721 versions: extendedVersions
722 },
723 data: {key: key, value: content.data[key]}
724 }, content.data[key]));
725
Gunnar Mills902c38c2018-02-23 10:12:39 -0600726 if(activationStatus == 'Functional' && imageType == 'BMC'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500727 bmcActiveVersion = content.data[key].Version;
728 }
729
Gunnar Mills902c38c2018-02-23 10:12:39 -0600730 if(activationStatus == 'Functional' && imageType == 'Host'){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500731 hostActiveVersion = content.data[key].Version;
732 }
733 }
734 }
Michael Davisdf3bd122017-08-10 11:03:42 -0500735
736 deferred.resolve({
Gunnar Millseedefd32018-02-28 17:02:34 -0600737 data: data,
738 bmcActiveVersion: bmcActiveVersion,
Michael Davisdf3bd122017-08-10 11:03:42 -0500739 hostActiveVersion: hostActiveVersion
740 });
Ed Tanousbbcf6702017-10-06 13:53:06 -0700741 }, function(error){
Iftekharul Islamc0161392017-06-14 15:46:15 -0500742 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500743 deferred.reject(error);
Iftekharul Islamc0161392017-06-14 15:46:15 -0500744 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500745
746 return deferred.promise;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500747 },
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500748 changePriority: function(imageId, priority){
749 var deferred = $q.defer();
750 $http({
751 method: 'PUT',
752 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/Priority",
753 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500754 'Accept': 'application/json',
755 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500756 },
757 withCredentials: true,
758 data: JSON.stringify({"data": priority})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700759 }).then(function(response){
760 var json = JSON.stringify(response.data);
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500761 var content = JSON.parse(json);
762 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700763 }, function(error){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500764 console.log(error);
765 deferred.reject(error);
766 });
767
768 return deferred.promise;
769 },
Iftekharul Islam2a489552017-11-02 13:23:08 -0500770 deleteImage: function(imageId){
771 var deferred = $q.defer();
772 $http({
773 method: 'POST',
774 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/action/Delete",
775 headers: {
776 'Accept': 'application/json',
777 'Content-Type': 'application/json'
778 },
779 withCredentials: true,
780 data: JSON.stringify({"data": []})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700781 }).then(function(response){
782 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500783 var content = JSON.parse(json);
784 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700785 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500786 console.log(error);
787 deferred.reject(error);
788 });
789
790 return deferred.promise;
791 },
792 activateImage: function(imageId){
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500793 var deferred = $q.defer();
Iftekharul Islamc0161392017-06-14 15:46:15 -0500794 $http({
795 method: 'PUT',
Iftekharul Islam2a489552017-11-02 13:23:08 -0500796 url: DataService.getHost() + "/xyz/openbmc_project/software/" + imageId + "/attr/RequestedActivation",
797 headers: {
798 'Accept': 'application/json',
799 'Content-Type': 'application/json'
800 },
801 withCredentials: true,
802 data: JSON.stringify({"data": Constants.FIRMWARE.ACTIVATE_FIRMWARE})
Ed Tanousbbcf6702017-10-06 13:53:06 -0700803 }).then(function(response){
804 var json = JSON.stringify(response.data);
Iftekharul Islam2a489552017-11-02 13:23:08 -0500805 var content = JSON.parse(json);
806 deferred.resolve(content);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700807 }, function(error){
Iftekharul Islam2a489552017-11-02 13:23:08 -0500808 console.log(error);
809 deferred.reject(error);
810 });
811
812 return deferred.promise;
813 },
814 uploadImage: function(file){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500815 return $http({
Iftekharul Islam2a489552017-11-02 13:23:08 -0500816 method: 'POST',
Iftekharul Islamc0161392017-06-14 15:46:15 -0500817 timeout: 5 * 60 * 1000,
Gunnar Millsdddb1492018-02-19 16:27:27 -0600818 url: DataService.getHost() + "/upload/image",
Iftekharul Islamc0161392017-06-14 15:46:15 -0500819 headers: {
Iftekharul Islam2a489552017-11-02 13:23:08 -0500820 'Content-Type': 'application/octet-stream'
Iftekharul Islamc0161392017-06-14 15:46:15 -0500821 },
822 withCredentials: true,
823 data: file
Ed Tanousbbcf6702017-10-06 13:53:06 -0700824 }).then(function(response){
Gunnar Mills87c3db62018-04-13 16:14:41 -0500825 return response.data;
Iftekharul Islamc0161392017-06-14 15:46:15 -0500826 });
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500827 },
828 downloadImage: function(host, filename){
Gunnar Mills36379b92018-04-02 16:53:53 -0500829 return $http({
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500830 method: 'POST',
Gunnar Millse345cac2018-02-20 11:16:53 -0600831 url: DataService.getHost() + "/xyz/openbmc_project/software/action/DownloadViaTFTP",
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500832 headers: {
Gunnar Mills36379b92018-04-02 16:53:53 -0500833 'Accept': 'application/json',
834 'Content-Type': 'application/json'
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500835 },
836 withCredentials: true,
Gunnar Millse345cac2018-02-20 11:16:53 -0600837 data: JSON.stringify({"data": [filename, host]}),
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500838 responseType: 'arraybuffer'
Gunnar Mills36379b92018-04-02 16:53:53 -0500839 }).then(function(response){
840 return response.data;
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500841 });
Iftekharul Islamc0161392017-06-14 15:46:15 -0500842 },
Michael Davisdf3bd122017-08-10 11:03:42 -0500843 getBMCEthernetInfo: function(){
844 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500845 $http({
846 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500847 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc/ethernet",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500848 headers: {
849 'Accept': 'application/json',
850 'Content-Type': 'application/json'
851 },
852 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700853 }).then(function(response){
854 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500855 var content = JSON.parse(json);
856 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700857 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500858 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500859 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500860 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500861
862 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500863 },
864 getBMCInfo: function(callback){
Michael Davisdf3bd122017-08-10 11:03:42 -0500865 var deferred = $q.defer();
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500866 $http({
867 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500868 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system/chassis/motherboard/boxelder/bmc",
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500869 headers: {
870 'Accept': 'application/json',
871 'Content-Type': 'application/json'
872 },
873 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700874 }).then(function(response){
875 var json = JSON.stringify(response.data);
Michael Davisdf3bd122017-08-10 11:03:42 -0500876 var content = JSON.parse(json);
877 deferred.resolve(content.data);
Ed Tanousbbcf6702017-10-06 13:53:06 -0700878 }, function(error){
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500879 console.log(error);
Michael Davisdf3bd122017-08-10 11:03:42 -0500880 deferred.reject(error);
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500881 });
Michael Davisdf3bd122017-08-10 11:03:42 -0500882 return deferred.promise;
Iftekharul Islam54c22e42017-06-28 11:06:16 -0500883 },
Gunnar Mills17708f22018-04-13 14:21:31 -0500884 getServerInfo: function(){
Gunnar Mills5ea75752018-04-19 16:07:10 -0500885 // TODO: openbmc/openbmc#3117 Need a way via REST to get
886 // interfaces so we can get the system object(s) by the looking
887 // for the system interface.
Gunnar Mills17708f22018-04-13 14:21:31 -0500888 return $http({
889 method: 'GET',
890 url: DataService.getHost() + "/xyz/openbmc_project/inventory/system",
891 headers: {
892 'Accept': 'application/json',
893 'Content-Type': 'application/json'
894 },
895 withCredentials: true
896 }).then(function(response){
897 return response.data;
898 });
899 },
Gunnar Millsed96f8b2018-04-19 15:33:40 -0500900 getBMCTime: function(){
901 return $http({
902 method: 'GET',
903 url: DataService.getHost() + "/xyz/openbmc_project/time/bmc",
904 headers: {
905 'Accept': 'application/json',
906 'Content-Type': 'application/json'
907 },
908 withCredentials: true
909 }).then(function(response){
910 return response.data;
911 });
912 },
Iftekharul Islamee27d752017-07-05 15:54:31 -0500913 getHardwares: function(callback){
914 $http({
915 method: 'GET',
Iftekharul Islam1acb4122017-11-02 13:20:32 -0500916 url: DataService.getHost() + "/xyz/openbmc_project/inventory/enumerate",
Iftekharul Islamee27d752017-07-05 15:54:31 -0500917 headers: {
918 'Accept': 'application/json',
919 'Content-Type': 'application/json'
920 },
921 withCredentials: true
Ed Tanousbbcf6702017-10-06 13:53:06 -0700922 }).then(function(response){
923 var json = JSON.stringify(response.data);
Iftekharul Islamee27d752017-07-05 15:54:31 -0500924 var content = JSON.parse(json);
925 var hardwareData = [];
926 var keyIndexMap = {};
927 var title = "";
928 var data = [];
929 var searchText = "";
930 var componentIndex = -1;
931 var tempParts = [];
932
933
934 function isSubComponent(key){
935
936 for(var i = 0; i < Constants.HARDWARE.parent_components.length; i++){
937 if(key.split(Constants.HARDWARE.parent_components[i]).length == 2) return true;
938 }
939
940 return false;
941 }
942
943 function titlelize(title){
944 title = title.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
945 for(var i = 0; i < Constants.HARDWARE.uppercase_titles.length; i++){
946 if(title.toLowerCase().indexOf((Constants.HARDWARE.uppercase_titles[i] + " ")) > -1){
947 return title.toUpperCase();
948 }
949 }
950
951 return title;
952 }
953
954 function camelcaseToLabel(obj){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500955 var transformed = [], label = "", value = "";
Iftekharul Islamee27d752017-07-05 15:54:31 -0500956 for(var key in obj){
957 label = key.replace(/([A-Z0-9]+)/g, " $1").replace(/^\s+/, "");
958 if(obj[key] !== ""){
Iftekharul Islam8947e702017-07-27 10:28:07 -0500959 value = obj[key];
960 if(value == 1 || value == 0){
961 value = (value == 1) ? 'Yes' : 'No';
962 }
963 transformed.push({key:label, value: value});
Iftekharul Islamee27d752017-07-05 15:54:31 -0500964 }
965 }
966
967 return transformed;
968 }
969
970 function getSearchText(data){
971 var searchText = "";
972 for(var i = 0; i < data.length; i++){
973 searchText += " " + data[i].key + " " + data[i].value;
974 }
975
Gunnar Millseedefd32018-02-28 17:02:34 -0600976 return searchText;
Iftekharul Islamee27d752017-07-05 15:54:31 -0500977 }
978
979 for(var key in content.data){
Gunnar Millseedefd32018-02-28 17:02:34 -0600980 if(content.data.hasOwnProperty(key) &&
Iftekharul Islamee27d752017-07-05 15:54:31 -0500981 key.indexOf(Constants.HARDWARE.component_key_filter) == 0){
982
983 data = camelcaseToLabel(content.data[key]);
984 searchText = getSearchText(data);
985 title = key.split("/").pop();
986
987 title = titlelize(title);
988
989 if(!isSubComponent(key)){
990 hardwareData.push(Object.assign({
991 path: key,
992 title: title,
993 selected: false,
994 expanded: false,
995 search_text: title.toLowerCase() + " " + searchText.toLowerCase(),
Gunnar Millseedefd32018-02-28 17:02:34 -0600996 sub_components: [],
Iftekharul Islamee27d752017-07-05 15:54:31 -0500997 original_data: {key: key, value: content.data[key]}
998 }, {items: data}));
999
1000 keyIndexMap[key] = hardwareData.length - 1;
1001 }else{
1002 var tempParts = key.split("/");
1003 tempParts.pop();
1004 tempParts = tempParts.join("/");
1005 componentIndex = keyIndexMap[tempParts];
1006 data = content.data[key];
1007 data.title = title;
1008 hardwareData[componentIndex].sub_components.push(data);
1009 hardwareData[componentIndex].search_text += " " + title.toLowerCase();
Gunnar Millscdd9d6b2018-03-09 11:57:06 -06001010
1011 // Sort the subcomponents alphanumeric so they are displayed on the
1012 // inventory page in order (e.g. core 0, core 1, core 2, ... core 12, core 13)
1013 hardwareData[componentIndex].sub_components.sort(function (a, b) {
1014 return a.title.localeCompare(b.title, 'en', { numeric: true });
1015 });
Iftekharul Islamee27d752017-07-05 15:54:31 -05001016 }
1017 }
1018 }
1019
1020 if(callback){
1021 callback(hardwareData, content.data);
1022 }else{
1023 return { data: hardwareData, original_data: content.data};
1024 }
1025 });
1026 },
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001027 deleteLogs: function(logs) {
1028 var defer = $q.defer();
1029 var promises = [];
1030
1031 function finished(){
1032 defer.resolve();
1033 }
1034
1035 logs.forEach(function(item){
1036 promises.push($http({
1037 method: 'POST',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001038 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/action/Delete",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001039 headers: {
1040 'Accept': 'application/json',
1041 'Content-Type': 'application/json'
1042 },
1043 withCredentials: true,
1044 data: JSON.stringify({"data": []})
1045 }));
1046 });
1047
1048 $q.all(promises).then(finished);
1049
1050 return defer.promise;
1051 },
1052 resolveLogs: function(logs) {
1053 var defer = $q.defer();
1054 var promises = [];
1055
1056 function finished(){
1057 defer.resolve();
1058 }
1059
1060 logs.forEach(function(item){
1061 promises.push($http({
1062 method: 'PUT',
Iftekharul Islam1acb4122017-11-02 13:20:32 -05001063 url: DataService.getHost() + "/xyz/openbmc_project/logging/entry/"+item.Id+"/attr/Resolved",
Iftekharul Islamf2d74642017-07-10 16:42:14 -05001064 headers: {
1065 'Accept': 'application/json',
1066 'Content-Type': 'application/json'
1067 },
1068 withCredentials: true,
1069 data: JSON.stringify({"data": "1"})
1070 }));
1071 });
1072
1073 $q.all(promises).then(finished);
1074
1075 return defer.promise;
1076 },
CamVan Nguyen33275832018-03-13 18:38:37 -05001077 getPowerConsumption: function(){
1078 return $http({
1079 method: 'GET',
1080 url: DataService.getHost() + "/xyz/openbmc_project/sensors/power/total_power",
1081 headers: {
1082 'Accept': 'application/json',
1083 'Content-Type': 'application/json'
1084 },
1085 withCredentials: true
1086 }).then(function(response){
1087 var json = JSON.stringify(response.data);
1088 var content = JSON.parse(json);
1089
1090 return getScaledValue(content.data.Value,
1091 content.data.Scale) + ' ' +
1092 Constants.POWER_CONSUMPTION_TEXT[content.data.Unit];
1093 }, function(error){
1094 if ('Not Found' == error.statusText) {
1095 return Constants.POWER_CONSUMPTION_TEXT.notavailable;
1096 } else {
1097 console.log(error);
1098 }
1099 });
1100 },
1101 getPowerCap: function(){
1102 return $http({
1103 method: 'GET',
1104 url: DataService.getHost() + "/xyz/openbmc_project/control/host0/power_cap",
1105 headers: {
1106 'Accept': 'application/json',
1107 'Content-Type': 'application/json'
1108 },
1109 withCredentials: true
1110 }).then(function(response){
1111 var json = JSON.stringify(response.data);
1112 var content = JSON.parse(json);
1113
1114 return (false == content.data.PowerCapEnable) ?
1115 Constants.POWER_CAP_TEXT.disabled :
1116 content.data.PowerCap + ' ' + Constants.POWER_CAP_TEXT.unit;
1117 }, function(error){
1118 console.log(error);
1119 });
1120 },
Iftekharul Islam99d199f2017-03-24 15:28:25 -05001121 };
1122 return SERVICE;
1123 }]);
1124
1125 })(window.angular);