summaryrefslogtreecommitdiffstats
path: root/app/configuration/controllers/date-time-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/configuration/controllers/date-time-controller.js')
-rw-r--r--app/configuration/controllers/date-time-controller.js161
1 files changed, 145 insertions, 16 deletions
diff --git a/app/configuration/controllers/date-time-controller.js b/app/configuration/controllers/date-time-controller.js
index cbc7443..02752fe 100644
--- a/app/configuration/controllers/date-time-controller.js
+++ b/app/configuration/controllers/date-time-controller.js
@@ -10,35 +10,164 @@ window.angular && (function(angular) {
'use strict';
angular.module('app.configuration').controller('dateTimeController', [
- '$scope', '$window', 'APIUtils',
- function($scope, $window, APIUtils) {
- $scope.bmc_time = '';
+ '$scope', '$window', 'APIUtils', '$route', '$q',
+ function($scope, $window, APIUtils, $route, $q) {
+ $scope.bmc = {};
+ $scope.host = {};
+ $scope.ntp = {servers: []};
$scope.time_mode = '';
$scope.time_owner = '';
+ $scope.time_owners = ['BMC', 'Host', 'Both', 'Split'];
+ $scope.set_time_error = false;
+ $scope.set_time_success = false;
$scope.loading = true;
+ var time_path = '/xyz/openbmc_project/time/';
var getTimePromise = APIUtils.getTime().then(
function(data) {
- $scope.bmc_time =
- data.data['/xyz/openbmc_project/time/bmc'].Elapsed / 1000;
- $scope.host_time =
- data.data['/xyz/openbmc_project/time/host'].Elapsed / 1000;
-
- $scope.time_owner = data.data['/xyz/openbmc_project/time/owner']
- .TimeOwner.split('.')
- .pop();
- $scope.time_mode =
- data.data['/xyz/openbmc_project/time/sync_method']
- .TimeSyncMethod.split('.')
- .pop();
+ // The time is returned as Epoch microseconds convert to
+ // milliseconds.
+ if (data.data[time_path + 'bmc'] &&
+ data.data[time_path + 'bmc'].hasOwnProperty('Elapsed')) {
+ $scope.bmc.date =
+ new Date(data.data[time_path + 'bmc'].Elapsed / 1000);
+ // Don't care about milliseconds and don't want them displayed
+ $scope.bmc.date.setMilliseconds(0);
+ // https://stackoverflow.com/questions/1091372/getting-the-clients-timezone-in-javascript
+ // GMT-0400 (EDT)
+ $scope.bmc.timezone =
+ $scope.bmc.date.toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1];
+ }
+ if (data.data[time_path + 'host'] &&
+ data.data[time_path + 'host'].hasOwnProperty('Elapsed')) {
+ $scope.host.date =
+ new Date(data.data[time_path + 'host'].Elapsed / 1000);
+ $scope.host.date.setMilliseconds(0);
+ $scope.host.timezone =
+ $scope.host.date.toString().match(/([A-Z]+[\+-][0-9]+.*)/)[1];
+ }
+ if (data.data[time_path + 'owner'] &&
+ data.data[time_path + 'owner'].hasOwnProperty('TimeOwner')) {
+ $scope.time_owner =
+ data.data[time_path + 'owner'].TimeOwner.split('.').pop();
+ }
+ if (data.data[time_path + 'sync_method'] &&
+ data.data[time_path + 'sync_method'].hasOwnProperty(
+ 'TimeSyncMethod')) {
+ $scope.time_mode = data.data[time_path + 'sync_method']
+ .TimeSyncMethod.split('.')
+ .pop();
+ }
},
function(error) {
console.log(JSON.stringify(error));
});
- getTimePromise.finally(function() {
+ var getNTPPromise = APIUtils.getNTPServers().then(
+ function(data) {
+ $scope.ntp.servers = data.data;
+ },
+ function(error) {
+ console.log(JSON.stringify(error));
+ });
+
+ var promises = [
+ getTimePromise,
+ getNTPPromise,
+ ];
+
+ $q.all(promises).finally(function() {
$scope.loading = false;
});
+
+ $scope.setTime = function() {
+ $scope.set_time_error = false;
+ $scope.set_time_success = false;
+ $scope.loading = true;
+ var promises = [setTimeMode(), setTimeOwner(), setNTPServers()];
+
+ $q.all(promises).then(
+ function() {
+ // Have to set the time mode and time owner first to avoid a
+ // insufficient permissions if the time mode or time owner had
+ // changed.
+ var manual_promises = [];
+ if ($scope.time_mode == 'Manual') {
+ // If owner is 'Split' set both.
+ // If owner is 'Host' set only it.
+ // Else set BMC only. See:
+ // https://github.com/openbmc/phosphor-time-manager/blob/master/README.md
+ if ($scope.time_owner != 'Host') {
+ manual_promises.push(setBMCTime());
+ }
+
+ if ($scope.time_owner == 'Host' ||
+ $scope.time_owner == 'Split') {
+ manual_promises.push(setHostTime());
+ }
+ }
+ $q.all(manual_promises)
+ .then(
+ function() {
+ $scope.set_time_success = true;
+ },
+ function(errors) {
+ console.log(JSON.stringify(errors));
+ $scope.set_time_error = true;
+ })
+ .finally(function() {
+ $scope.loading = false;
+ });
+ },
+ function(errors) {
+ console.log(JSON.stringify(errors));
+ $scope.set_time_error = true;
+ $scope.loading = false;
+ });
+ };
+ $scope.refresh = function() {
+ $route.reload();
+ };
+
+ $scope.addNTPField = function() {
+ $scope.ntp.servers.push('');
+ };
+
+ function setNTPServers() {
+ // Remove any empty strings from the array. Important because we add an
+ // empty string to the end so the user can add a new NTP server, if the
+ // user doesn't fill out the field, we don't want to add.
+ $scope.ntp.servers = $scope.ntp.servers.filter(Boolean);
+ // NTP servers does not allow an empty array, since we remove all empty
+ // strings above, could have an empty array. TODO: openbmc/openbmc#3240
+ if ($scope.ntp.servers.length == 0) {
+ $scope.ntp.servers.push('');
+ }
+ return APIUtils.setNTPServers($scope.ntp.servers);
+ }
+
+ function setTimeMode() {
+ return APIUtils.setTimeMode(
+ 'xyz.openbmc_project.Time.Synchronization.Method.' +
+ $scope.time_mode);
+ }
+
+ function setTimeOwner() {
+ return APIUtils.setTimeOwner(
+ 'xyz.openbmc_project.Time.Owner.Owners.' + $scope.time_owner);
+ }
+
+ function setBMCTime() {
+ // Add the separate date and time objects and convert to Epoch time in
+ // microseconds.
+ return APIUtils.setBMCTime($scope.bmc.date.getTime() * 1000);
+ }
+
+ function setHostTime() {
+ // Add the separate date and time objects and convert to Epoch time
+ // microseconds.
+ return APIUtils.setHostTime($scope.host.date.getTime() * 1000);
+ }
}
]);
})(angular);
OpenPOWER on IntegriCloud