{"version":3,"sources":["scripts/app.js"],"names":["angular","module","truncate","Math","trunc","x","isNaN","NaN","floor","ceil","val","places","truncated","pow","toFixed","filter","statusData","$rootScope","$http","$q","handleError","response","getStatus","env","url","param","params","environment","get","then","results","data","$broadcast","getNotifications","notifications","getLists","combine","isCombined","components","services","getChartData","chartParams","chartUrl","getEnv","apiUrl","service","envUrl","getSystemEnv","updateEnv","updateTimestamp","time","$inject","factory","status","directive","restrict","templateUrl","spinner","SpinnerController","$scope","show","$on","template","controller","scrollFollow","$window","ScrollFollowController","link","scope","element","attrs","$this","$","$content","find","$parent","follow","on","this","pageYOffset","offset","height","$apply","prettyTime","mt","moment","isDST","parseZone","utcOffset","ft","ts","Date","format","getTime","prettyService","string","length","i","metric","name","prettyComponent","backendName","prettyEnv","route","pageAlert","PageAlertController","$filter","$sce","vm","servicesList","componentsList","updateAlerts","incidents","alerts","forEach","obj","notification_status","notification_type","messages","latest_message","message","customer_action","last_updated_ts","push","all","showAllSystemsOperational","closeAlert","index","splice","event","controllerAs","lastUpdated","lastUpdatedController","newTime","infiniteScroll","InfiniteScrollController","window","unbind","scroll","scrollTop","document","parentController","pageSize","fullHtml","html","trustAsHtml","environments","EnvironmentsController","getEnvironments","vip","envList","_","union","error","errorDetails","statusText","currRoute","toState","toParams","fromState","fromParams","color","pcnt","newColor","green1","green2","green3","green4","green5","green6","red6","red5","red4","red3","red2","red1","adminNav","AdminNavController","jQuery","Error","a","b","fn","jquery","split","createElement","WebkitTransition","MozTransition","OTransition","transition","c","style","end","emulateTransitionEnd","d","one","e","trigger","support","setTimeout","special","bsTransitionEnd","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments","each","call","close","VERSION","TRANSITION_DURATION","prototype","g","detach","remove","f","attr","replace","preventDefault","closest","Event","isDefaultPrevented","removeClass","hasClass","alert","Constructor","noConflict","toggle","setState","$element","options","extend","DEFAULTS","isLoading","loadingText","resetText","proxy","addClass","prop","removeAttr","toggleClass","button","first","test","type","slide","to","interval","pause","cycle","$indicators","paused","sliding","$active","$items","keyboard","keydown","documentElement","wrap","tagName","which","prev","next","clearInterval","setInterval","getItemIndex","parent","children","getItemForDirection","eq","h","j","k","relatedTarget","direction","l","m","offsetWidth","join","carousel","$trigger","id","transitioning","getParent","addAriaAndCollapsedClass","dimension","camelCase","hide","offsetHeight","collapse","contains","insertAfter","stopPropagation","dropdown","$body","body","$dialog","$backdrop","isShown","originalBodyPad","scrollbarWidth","ignoreBackdropClick","remote","load","BACKDROP_TRANSITION_DURATION","backdrop","checkScrollbar","setScrollbar","escape","resize","appendTo","adjustDialog","enforceFocus","off","hideModal","has","handleUpdate","resetAdjustments","resetScrollbar","removeBackdrop","currentTarget","focus","scrollHeight","clientHeight","css","paddingLeft","bodyIsOverflowing","paddingRight","innerWidth","getBoundingClientRect","right","abs","left","clientWidth","measureScrollbar","parseInt","className","append","removeChild","modal","enabled","timeout","hoverState","inState","init","animation","placement","selector","title","delay","container","viewport","padding","getOptions","$viewport","isFunction","click","hover","constructor","enter","leave","_options","fixTitle","getDefaults","getDelegateOptions","tip","clearTimeout","isInStateTrue","hasContent","ownerDocument","getUID","setContent","top","display","getPosition","n","o","bottom","width","p","getCalculatedOffset","applyPlacement","q","$tip","setOffset","using","round","getViewportAdjustedDelta","replaceArrow","arrow","getTitle","SVGElement","random","getElementById","$arrow","enable","disable","toggleEnabled","destroy","removeData","tooltip","content","getContent","popover","$scrollElement","offsets","targets","activeTarget","process","refresh","getScrollHeight","max","isWindow","map","sort","activate","clear","parents","parentsUntil","scrollspy","tab","$target","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","RESET","getState","getPinnedOffset","affix","offsetBottom","offsetTop","adminData","$location","getToken","getNewToken","titlebarJsUrl","titlebarUrl","getScript","request","titlebar","app","loginOnTokenFail","showApps","loginOnLogOut","token","getUsername","updateToken","defer","resolve","reject","localStorage","user","JSON","parse","unix","expiration","promise","removeItem","setItem","stringify","uuidv4","r","v","toString","host","adminApiUrl","method","headers","Authorization","aResult","oInfo","sFirstName","sLastName","getEvents","approval_status","availabilityUrl","requestParam","startTime","endTime","updateEvent","operator","status_percent","note","mod_ver","component","event_time","batchUpdateEvents","events","batchAddEvent","selectedComponents","addEvent","start","start_ts","end_ts","postNotification","resolution_ts","vendor_name","components_affected","editNotification","message_index","message_ts","notification_id","sendEmail","mailChimpName","emailSubject","emailBody","Content-Type","deleteUpdate","ServiceController","$state","$stateParams","$timeout","$anchorScroll","scrollTo","yOffset","history","requestStatus","availability","graphSubDataList","timeStart","timeEnd","details","updateTimeRange","range","timezone","tz","guess","adjEnd","dayEnd","add","startOf","numberOfPoints","timePeriod","timeZone","subtract","timeRange","refreshChart","result","addVendorFlag","showDetails","selected","graphDataCriteria","toLowerCase","componentBackendName","selStart","selEnd","endOf","popoverData","notif","notifStart","notifEnd","affected","notification","affectedList","dataPoints","point","incidentStart","incidentEnd","pointStart","pointEnd","zoomIn","chart","serviceName","rendered","hash","go","notify","$watch","newVal","oldVal","NotifyController","$uibModal","formatType","getColor","getIcon","iconUrl","getComponentNames","componentHtml","prettyComponentName","prettyMetricName","getFullThread","messageHtml","utc","open","windowClass","PostModalController","$uibModalInstance","newNotification","encodeURIComponent","$ctrl","markResolved","email","mailChimpURL","clearNotificationForm","ok","cancel","dismiss","updateStatusResolved","updateStatusRevoke","newStartTime","updateMessage","postUpdate","postUpdateModalController","updateNotification","editUpdate","copy","toggleForm","showForm","removeAffected","collection","addAffected","exists","findIndex","undefined","addMultiple","AddModalController","size","addAll","selectedComponent","systemEnv","listFilter","tinymceOptions","menubar","skin","inline_styles","browser_spellcheck","plugins","toolbar","setup","editor","addButton","text","icon","onclick","insertContent","$watchGroup","ManageController","refreshData","chartReqStatus","selectedService","selectedServiceMetric","isCached","componentChart","showAddEvent","customEvent","applyAction","action","comment","mod_version","getComponent","showChart","rangeFilter","showAll","search","toggleComment","showComment","batchAdd","batchAddController","updateChart","points","unit","chartData","zoomTime","showAddEventPanel","eventTime","newEvent","eventNote","eventAvailability","eventStatus","showSelectTimePanel","chartPoints","newV","oldV","Intl","DateTimeFormat","resolvedOptions","eventFilter","arraysEqual","arr1","arr2","MainController","$interval","showService","allStatus","groups","getData","group","vendor","scrollToSubscribe","animate","stopUpdate","timer","client","core","connectivity","server","AlertsController","startUpdate","toggleSelect","bool","prunedEvent","pick","selectedEvents","toggleMultiAction","showMultiAction","toggleSelectAll","actioned","toggleSelectAllBool","batchAction","ModalController","confirmBatchAction","batchComment","current","batchActionConfirmed","key","reverse","sortBy","runBlock","$log","debug","run","routerConfig","$stateProvider","$urlRouterProvider","$locationProvider","state","otherwise","config","constant","$logProvider","debugEnabled","hashPrefix","$templateCache","put"],"mappings":"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","file":"scripts/app-aaa84e356f.js","sourcesContent":["(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('client', ['ngSanitize','ngAnimate', 'ui.router', 'ui.bootstrap', 'ui.tinymce']);\r\n\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('truncate', truncate);\r\n\r\n\t/** @ngInject */\r\n\tfunction truncate() {\r\n\t\tMath.trunc = Math.trunc || function(x) {\r\n\t\t\tif (isNaN(x)) {\r\n\t\t\t\treturn NaN;\r\n\t\t\t}\r\n\t\t\tif (x > 0) {\r\n\t\t\t\treturn Math.floor(x);\r\n\t\t\t}\r\n\t\t\treturn Math.ceil(x);\r\n\t\t};\r\n\r\n\t\treturn function(val, places) {\r\n\t\t\tvar truncated = Math.trunc(val * Math.pow(10, places)) / Math.pow(10, places).toFixed(places);\r\n\r\n\t\t\treturn truncated;\r\n\t\t}\r\n\t}\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.factory('statusData', statusData);\r\n\r\n\t/** @ngInject */\r\n\tfunction statusData($rootScope, $http, $q) {\r\n\t\tvar results = [];\r\n\t\tvar service = {\r\n\t\t\tgetStatus : getStatus,\r\n\t\t\tgetChartData : getChartData,\r\n\t\t\tgetEnv : getEnv,\r\n\t\t\tgetSystemEnv : getSystemEnv,\r\n\t\t\tgetNotifications : getNotifications,\r\n\t\t\tgetLists : getLists,\r\n\t\t\tupdateEnv : updateEnv,\r\n\t\t\tupdateTimestamp : updateTimestamp,\r\n\t\t\tdata : results,\r\n\t\t\tenv : 'ext-prod-live',\r\n\t\t\tenvUrl: 'api/v1/Environment'\r\n\t\t};\r\n\r\n\t\treturn service;\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tHandle Success\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction handleSuccess(response, name) {\r\n\t\t\tresults[name] = response.data;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tHandle Error\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction handleError(response) {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Data\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getStatus(env) {\r\n\t\t\tvar url = '/api/v1/status';\r\n\t\t\tvar param = {\r\n\t\t\t\tparams : {\r\n\t\t\t\t\tenvironment: env\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Get Status\r\n\t\t\treturn $http.get(url, param)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\tresults['status'] = response.data;\r\n\r\n\t\t\t\t\t// Broadcast to app that new Notifications are available\r\n\t\t\t\t\t$rootScope.$broadcast('statusUpdated', results);\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Notifications\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getNotifications(env) {\r\n\t\t\tvar url = '/api/v1/Notifications?env='+env;\r\n\r\n\t\t\treturn $http.get(url)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\tresults['notifications'] = response.data.notifications;\r\n\r\n\t\t\t\t\t// Broadcast to app that new Notifications are available\r\n\t\t\t\t\t$rootScope.$broadcast('notificationUpdated', results);\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet All Components\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getLists(env, combine) {\r\n\t\t\tvar url = '/api/v1/ServiceAndComponentList';\r\n\t\t\tvar param = {\r\n\t\t\t\tparams : {\r\n\t\t\t\t\tenvironment: env,\r\n\t\t\t\t\tisCombined: (combine) ? combine : false\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn $http.get(url, param)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\tresults['components'] = response.data.components;\r\n\t\t\t\t\tresults['services'] = response.data.services;\r\n\r\n\t\t\t\t\treturn results;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Chart Data\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getChartData(chartParams) {\r\n\t\t\tvar chartUrl = '/api/v1/GraphData';\r\n\r\n\t\t\treturn $http.get(chartUrl, chartParams)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Environments\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getEnv(apiUrl) {\r\n\t\t\tapiUrl ? service.envUrl = apiUrl: service.envUrl;\r\n\r\n\t\t\treturn $http.get(service.envUrl).then(function(data) {\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Current System Environment\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getSystemEnv() {\r\n\t\t\tvar url = '/api/v1/EnvSettings';\r\n\r\n\t\t\treturn $http.get(url).then(function(data) {\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Environment\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateEnv(env) {\r\n\t\t\tservice.env = env;\r\n\t\t\t$rootScope.$broadcast('envUpdated', env);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Time Stamp\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateTimestamp(time) {\r\n\t\t\treturn $rootScope.$broadcast('timeUpdated', time);\r\n\t\t}\r\n\t}\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('status', status);\r\n\r\n\t/** @ngInject */\r\n\tfunction status() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'A',\r\n\t\t\ttemplateUrl: 'app/components/status/status.html'\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\t}\r\n\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('spinner', spinner);\r\n\r\n\t/** @ngInject */\r\n\tfunction spinner() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplate: 'Loading...',\r\n\t\t\tcontroller: SpinnerController\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction SpinnerController($scope) {\r\n\t\t\t$scope.show = false;\r\n\r\n\t\t\t$scope.$on('showSpinner', function(response, data) {\r\n\t\t\t\t$scope.show = true;\r\n\t\t\t});\r\n\t\t\t$scope.$on('hideSpinner', function(response, data) {\r\n\t\t\t\t$scope.show = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n})();\n/*\r\nScroll Follow\r\nComponent must be configured like:\r\n\r\n\t\r\n\t\t...\r\n\t\r\n\r\n*/\r\n\r\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('scrollFollow', scrollFollow);\r\n\r\n\t/** @ngInject */\r\n\tfunction scrollFollow($window) {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: link,\r\n\t\t\tscope: {\r\n\t\t\t\toffset: '=offset'\r\n\t\t\t},\r\n\t\t\tcontroller: ScrollFollowController\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction ScrollFollowController($scope) {\r\n\t\t\treturn $scope;\r\n\t\t}\r\n\r\n\t\tfunction link(scope, element, attrs, controller) {\r\n\t\t\tvar $this = $(element);\r\n\t\t\tvar $content = $this.find('.content');\r\n\r\n\t\t\tcontroller.$parent.follow = false;\r\n\r\n\t\t\tangular.element($window).on('scroll', function () {\r\n\t\t\t\tif (this.pageYOffset >= scope.offset) {\r\n\t\t\t\t\t$this.height($content.height());\r\n\r\n\t\t\t\t\tcontroller.$parent.follow = true;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Revert height to auto\r\n\t\t\t\t\t$this.height('auto');\r\n\r\n\t\t\t\t\tcontroller.$parent.follow = false;\r\n\t\t\t\t}\r\n\t\t\t\tcontroller.$apply();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('prettyTime', prettyTime);\r\n\r\n\t/** @ngInject */\r\n\tfunction prettyTime() {\r\n\t\treturn function(time) {\r\n\t\t\t// Moment Time\r\n\t\t\tvar mt = moment(time*1000);\r\n\r\n\t\t\tif (!mt.isDST()) {\r\n\t\t\t\t// Get local offset\r\n\t\t\t\tvar offset = moment.parseZone().utcOffset();\r\n\r\n\t\t\t\t// Apply offset\r\n\t\t\t\tvar ft = mt.utcOffset(offset);\r\n\r\n\t\t\t\ttime = moment(ft);\r\n\t\t\t} else {\r\n\t\t\t\ttime = mt;\r\n\t\t\t}\r\n\r\n\t\t\t// Format time to local\r\n\t\t\tvar ts = Math.floor(new Date(time.format('MMM/DD/YYYY, hh:mm:ss a')).getTime());\r\n\r\n\t\t\treturn ts;\r\n\t\t};\r\n\t}\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('prettyService', prettyService);\r\n\r\n\t/** @ngInject */\r\n\tfunction prettyService() {\r\n\t\treturn function(string, services) {\r\n\t\t\tif (services.length) {\r\n\t\t\t\tfor (var i = 0; i < services.length; i++) {\r\n\t\t\t\t\tif (services[i].metric===string) {\r\n\t\t\t\t\t\tstring = services[i].name;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn string;\r\n\t\t};\r\n\t}\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('prettyComponent', prettyComponent);\r\n\r\n\t/** @ngInject */\r\n\tfunction prettyComponent() {\r\n\t\treturn function(string, components) {\r\n\t\t\tif (components.length) {\r\n\t\t\t\tfor (var i = 0; i < components.length; i++) {\r\n\t\t\t\t\tif (components[i].backendName===string) {\r\n\t\t\t\t\t\tstring = components[i].name;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn string;\r\n\t\t};\r\n\t}\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('prettyEnv', prettyEnv);\r\n\r\n\t/** @ngInject */\r\n\tfunction prettyEnv() {\r\n\t\treturn function(env, route) {\r\n\t\t\tswitch(env) {\r\n\t\t\t\tcase 'ext-prod-live':\r\n\t\t\t\t\tenv = 'Live';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'ext-prod-sim':\r\n\t\t\t\t\tenv = 'Simulation';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'ext-alt-live':\r\n\t\t\t\t\tenv = 'Crypto';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\treturn env;\r\n\t\t};\r\n\t}\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('pageAlert', pageAlert);\r\n\r\n\t/** @ngInject */\r\n\tfunction pageAlert() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/pageAlert/pageAlert.html',\r\n\t\t\tcontroller: PageAlertController,\r\n\t\t\tcontrollerAs: 'vm'\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction PageAlertController($scope, $q, $filter, statusData, $sce) {\r\n\t\t\tvar vm = this;\r\n\r\n\t\t\t// Data\r\n\t\t\tvm.environment = statusData.env;\r\n\t\t\tvm.alerts = [];\r\n\t\t\tvm.servicesList = [];\r\n\t\t\tvm.componentsList = [];\r\n\r\n\t\t\t// UI\r\n\t\t\tvm.showAllSystemsOperational = false;\r\n\r\n\t\t\t// Actions\r\n\t\t\tvm.closeAlert = closeAlert;\r\n\r\n\t\t\t/*****************************************************************************\r\n\t\t\tGet list of services first, if not present\r\n\t\t\t*****************************************************************************/\r\n\r\n\t\t\tfunction getLists() {\r\n\t\t\t\treturn statusData.getLists(vm.environment, true)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Clear lists\r\n\t\t\t\t\t\tvm.servicesList = [];\r\n\t\t\t\t\t\tvm.componentsList = [];\r\n\r\n\t\t\t\t\t\t// Apply new data\r\n\t\t\t\t\t\tvm.servicesList = response.services;\r\n\t\t\t\t\t\tvm.componentsList = response.components;\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/*****************************************************************************\r\n\t\t\tUpdate Alerts\r\n\t\t\t*****************************************************************************/\r\n\r\n\t\t\tfunction updateAlerts(data) {\r\n\t\t\t\tvar incidents = 0;\r\n\r\n\t\t\t\tvm.alerts = [];\r\n\r\n\t\t\t\tangular.forEach(data.notifications, function(obj) {\r\n\t\t\t\t\tif (obj.notification_status===2 && obj.notification_type===2 || obj.notification_status===2 && obj.notification_type===4 || obj.notification_status===2 && obj.notification_type===5) {\r\n\t\t\t\t\t\tincidents++;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Ongoing messages. These will be displayed as a Page Alert\r\n\t\t\t\t\tif (obj.notification_status===2) {\r\n\r\n\t\t\t\t\t\tif (obj.messages.length > 1) {\r\n\t\t\t\t\t\t\tobj.messages = $filter('orderBy')(obj.messages, 'ts', true);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Pick latest message\r\n\t\t\t\t\t\tobj.latest_message = obj.messages[0].message;\r\n\t\t\t\t\t\tobj.customer_action = obj.messages[0].customer_action;\r\n\t\t\t\t\t\tobj.last_updated_ts = obj.messages[0].ts;\r\n\r\n\t\t\t\t\t\tvm.alerts.push(obj);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// Check Status when all notifications have been retrieved\r\n\t\t\t\t$q.all(vm.alerts).then(function() {\r\n\t\t\t\t\t// Toggle \"All Systems Operational\" message\r\n\t\t\t\t\tif (data.status && data.status.status==='Up' && !incidents) {\r\n\t\t\t\t\t\tvm.showAllSystemsOperational=true;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tvm.showAllSystemsOperational=false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t$scope.$on('notificationUpdated', function(event, data) {\r\n\t\t\t\tupdateAlerts(data);\r\n\t\t\t});\r\n\r\n\t\t\t$scope.$on('statusUpdated', function(event, data) {\r\n\t\t\t\tupdateAlerts(data);\r\n\t\t\t});\r\n\r\n\r\n\t\t\t/*****************************************************************************\r\n\t\t\tActions\r\n\t\t\t*****************************************************************************/\r\n\r\n\t\t\tfunction closeAlert(index) {\r\n\t\t\t\tvm.alerts.splice(index, 1);\r\n\t\t\t}\r\n\r\n\r\n\t\t\t/*****************************************************************************\r\n\t\t\tUpdate Data\r\n\t\t\t*****************************************************************************/\r\n\r\n\t\t\t$scope.$on('envUpdated', function(response, env) {\r\n\t\t\t\tvm.environment = env;\r\n\t\t\t\tgetLists();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('lastUpdated', lastUpdated);\r\n\r\n\t/** @ngInject */\r\n\tfunction lastUpdated() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/lastUpdated/lastUpdated.html',\r\n\t\t\tcontroller: lastUpdatedController\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction lastUpdatedController($scope, statusData) {\r\n\t\t\t// Data\r\n\t\t\t$scope.newTime = moment().format();\r\n\r\n\t\t\t$scope.$on('timeUpdated', function(response, time) {\r\n\t\t\t\t$scope.newTime = time;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\r\n})();\r\n\n\r\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('infiniteScroll', infiniteScroll);\r\n\r\n\t/** @ngInject */\r\n\tfunction infiniteScroll($window) {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\tscope:{\r\n\t\t\t\tparentController:'=',\r\n\t\t\t\tpageSize:'='\r\n\t\t\t},\r\n\t\t\tlink: link,\r\n\t\t\tcontroller: InfiniteScrollController\r\n\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction InfiniteScrollController($scope) {\r\n\t\t\treturn $scope;\r\n\t\t}\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction link($rootScope, scope, element, attrs, controller) {\r\n\t\t\t$(window).unbind().scroll(function() {\r\n\t\t\t\t// When scrolling reaches bottom of page\r\n\t\t\t\tif (($(window).scrollTop() + $(window).height()).toFixed() == $(document).height() && $(window).scrollTop() !== 0) {\r\n\t\t\t\t\tattrs.parentController.pageSize = attrs.parentController.pageSize + 30;\r\n\t\t\t\t\tattrs.$apply();\r\n\t\t\t\t}\r\n\t\t\t\t// When scrolling reaches top of page\r\n\t\t\t\telse if ($(window).scrollTop() <= 0) {\r\n\t\t\t\t\tattrs.parentController.pageSize = attrs.pageSize;\r\n\t\t\t\t\tattrs.$apply();\r\n\t\t\t}\r\n\t\t});\r\n\t\t}\r\n\t}\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('fullHtml', fullHtml);\r\n\r\n\t/** @ngInject */\r\n\tfunction fullHtml($sce) {\r\n\t\treturn function(html) {\r\n\t\t\treturn $sce.trustAsHtml(html);\r\n\t\t};\r\n\t}\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('environments', environments);\r\n\r\n\t/** @ngInject */\r\n\tfunction environments() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/environments/environments.html',\r\n\t\t\tcontroller: EnvironmentsController\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction EnvironmentsController($scope, statusData, $filter) {\r\n\t\t// UI\r\n\t\t$scope.env = statusData.env;\r\n\t\t$scope.currRoute = '';\r\n\t\t$scope.error = false;\r\n\t\t$scope.errorDetails = '';\r\n\r\n\r\n\t\t// Data\r\n\t\t$scope.envList = [];\r\n\r\n\t\t// Actions\r\n\t\t$scope.updateEnv = updateEnv;\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Environments\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getEnvironments(apiUrl){\r\n\t\t\tstatusData.getEnv(apiUrl).then(function(response) {\r\n\t\t\t\tvar vip = ['ext-prod-live','ext-prod-sim','ext-alt-live'];\r\n\r\n\t\t\t\t// Always keep Live(ext-prod-live), Simulation(ext-prod-sim), & Crypto(ext-alt-live) at the top of the menu\r\n\t\t\t\t$scope.envList = _.union(vip, response.data);\r\n\t\t\t}).catch(function(error) {\r\n\t\t\t\t$scope.error = true;\r\n\t\t\t\t$scope.errorDetails = error.status + ' ' + error.statusText;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Environments\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateEnv(env) {\r\n\t\t\tstatusData.updateEnv(env);\r\n\t\t}\r\n\r\n\t\t$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {\r\n\t\t\t$scope.currRoute = toState.name;\r\n\r\n\t\t\tif (toState.name === 'home' || toState.name === 'service') {\r\n\t\t\t\tstatusData.env = toParams.environment;\r\n\t\t\t\tgetEnvironments('api/v1/Environment');\r\n\t\t\t} else {\r\n\t\t\t\tstatusData.env = $scope.env;\r\n\t\t\t\tgetEnvironments('api/v1/Environment/include-real-time-market');\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t$scope.$on('envUpdated', function(response, env) {\r\n\t\t\t$scope.env = env;\r\n\t\t});\r\n\t}\r\n\r\n}\r\n\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.filter('color', color);\r\n\r\n\t/** @ngInject */\r\n\tfunction color() {\r\n\t\treturn function(pcnt) {\r\n\t\t\tvar green1 = '408C40';\r\n\t\t\tvar green2 = '5C9F43';\r\n\t\t\tvar green3 = '80B246';\r\n\t\t\tvar green4 = 'ADC648';\r\n\t\t\tvar green5 = 'D9CF48';\r\n\t\t\tvar green6 = 'EDB647';\r\n\t\t\tvar red6 = 'EEA145';\r\n\t\t\tvar red5 = 'EA9047';\r\n\t\t\tvar red4 = 'E68148';\r\n\t\t\tvar red3 = 'E2724A';\r\n\t\t\tvar red2 = 'DE654C';\r\n\t\t\tvar red1 = 'D9524E';\r\n\t\t\tvar newColor;\r\n\r\n\t\t\tif (pcnt===0) {\r\n\t\t\t\tnewColor = red1;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>0 && pcnt<=10) {\r\n\t\t\t\tnewColor = red2;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>10 && pcnt<=20) {\r\n\t\t\t\tnewColor = red3;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>20 && pcnt<=30) {\r\n\t\t\t\tnewColor = red4;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>30 && pcnt<=40) {\r\n\t\t\t\tnewColor = red5;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>40 && pcnt<=50) {\r\n\t\t\t\tnewColor = red6;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>50 && pcnt<=60) {\r\n\t\t\t\tnewColor = green6;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>60 && pcnt<=70) {\r\n\t\t\t\tnewColor = green5;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>70 && pcnt<=80) {\r\n\t\t\t\tnewColor = green4;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>80 && pcnt<=90) {\r\n\t\t\t\tnewColor = green3;\r\n\t\t\t}\r\n\t\t\telse if (pcnt>90 && pcnt<100) {\r\n\t\t\t\tnewColor = green2;\r\n\t\t\t}\r\n\t\t\telse if (pcnt===100) {\r\n\t\t\t\tnewColor = green1;\r\n\t\t\t}\r\n\r\n\t\t\treturn '#' + newColor;\r\n\t\t};\r\n\t}\r\n})();\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.directive('adminNav', adminNav);\r\n\r\n\t/** @ngInject */\r\n\tfunction adminNav() {\r\n\t\tvar directive = {\r\n\t\t\trestrict: 'E',\r\n\t\t\ttemplateUrl: 'app/components/adminNav/adminNav.html',\r\n\t\t\tcontroller: AdminNavController\r\n\t\t};\r\n\r\n\t\treturn directive;\r\n\r\n\t\t/** @ngInject */\r\n\t\tfunction AdminNavController($scope, statusData) {\r\n\t\t\t// UI\r\n\t\t\t$scope.env = statusData.env;\r\n\r\n\t\t\t// Update environment on change\r\n\t\t\t$scope.$on('envUpdated', function(response, env) {\r\n\t\t\t\t$scope.env = env;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n})();\r\n\n/*!\r\n * Bootstrap v3.3.7 (http://getbootstrap.com)\r\n * Copyright 2011-2016 Twitter, Inc.\r\n * Licensed under the MIT license\r\n */\r\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(a){\"use strict\";var b=a.fn.jquery.split(\" \")[0].split(\".\");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),+function(a){\"use strict\";function b(){var a=document.createElement(\"bootstrap\"),b={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(\"bsTransitionEnd\",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var c=a(this),e=c.data(\"bs.alert\");e||c.data(\"bs.alert\",e=new d(this)),\"string\"==typeof b&&e[b].call(c)})}var c='[data-dismiss=\"alert\"]',d=function(b){a(b).on(\"click\",c,this.close)};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger(\"closed.bs.alert\").remove()}var e=a(this),f=e.attr(\"data-target\");f||(f=e.attr(\"href\"),f=f&&f.replace(/.*(?=#[^\\s]*$)/,\"\"));var g=a(\"#\"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(\".alert\")),g.trigger(b=a.Event(\"close.bs.alert\")),b.isDefaultPrevented()||(g.removeClass(\"in\"),a.support.transition&&g.hasClass(\"fade\")?g.one(\"bsTransitionEnd\",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on(\"click.bs.alert.data-api\",c,d.prototype.close)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.button\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.button\",e=new c(this,f)),\"toggle\"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION=\"3.3.7\",c.DEFAULTS={loadingText:\"loading...\"},c.prototype.setState=function(b){var c=\"disabled\",d=this.$element,e=d.is(\"input\")?\"val\":\"html\",f=d.data();b+=\"Text\",null==f.resetText&&d.data(\"resetText\",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),\"loadingText\"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle=\"buttons\"]');if(b.length){var c=this.$element.find(\"input\");\"radio\"==c.prop(\"type\")?(c.prop(\"checked\")&&(a=!1),b.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==c.prop(\"type\")&&(c.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(a=!1),this.$element.toggleClass(\"active\")),c.prop(\"checked\",this.$element.hasClass(\"active\")),a&&c.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(c){var d=a(c.target).closest(\".btn\");b.call(d,\"toggle\"),a(c.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(c.preventDefault(),d.is(\"input,button\")?d.trigger(\"focus\"):d.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(b){a(b.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.carousel\"),f=a.extend({},c.DEFAULTS,d.data(),\"object\"==typeof b&&b),g=\"string\"==typeof b?b:f.slide;e||d.data(\"bs.carousel\",e=new c(this,f)),\"number\"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",a.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",a.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",a.proxy(this.cycle,this))};c.VERSION=\"3.3.7\",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(\".item\"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d=\"prev\"==a&&0===c||\"next\"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e=\"prev\"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?\"next\":\"prev\",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(\".next, .prev\").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},c.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},c.prototype.slide=function(b,d){var e=this.$element.find(\".item.active\"),f=d||this.getItemForDirection(b,e),g=this.interval,h=\"next\"==b?\"left\":\"right\",i=this;if(f.hasClass(\"active\"))return this.sliding=!1;var j=f[0],k=a.Event(\"slide.bs.carousel\",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass(\"active\")}var m=a.Event(\"slid.bs.carousel\",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass(\"slide\")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one(\"bsTransitionEnd\",function(){f.removeClass([b,h].join(\" \")).addClass(\"active\"),e.removeClass([\"active\",h].join(\" \")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass(\"active\"),f.addClass(\"active\"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr(\"data-target\")||(d=e.attr(\"href\"))&&d.replace(/.*(?=#[^\\s]+$)/,\"\"));if(f.hasClass(\"carousel\")){var g=a.extend({},f.data(),e.data()),h=e.attr(\"data-slide-to\");h&&(g.interval=!1),b.call(f,g),h&&f.data(\"bs.carousel\").to(h),c.preventDefault()}};a(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",e).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",e),a(window).on(\"load\",function(){a('[data-ride=\"carousel\"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){\"use strict\";function b(b){var c,d=b.attr(\"data-target\")||(c=b.attr(\"href\"))&&c.replace(/.*(?=#[^\\s]+$)/,\"\");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data(\"bs.collapse\"),f=a.extend({},d.DEFAULTS,c.data(),\"object\"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data(\"bs.collapse\",e=new d(this,f)),\"string\"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle=\"collapse\"][href=\"#'+b.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+b.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION=\"3.3.7\",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass(\"width\");return a?\"width\":\"height\"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var b,e=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(e&&e.length&&(b=e.data(\"bs.collapse\"),b&&b.transitioning))){var f=a.Event(\"show.bs.collapse\");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,\"hide\"),b||e.data(\"bs.collapse\",null));var g=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[g](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var h=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[g](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!a.support.transition)return h.call(this);var i=a.camelCase([\"scroll\",g].join(\"-\"));this.$element.one(\"bsTransitionEnd\",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var b=a.Event(\"hide.bs.collapse\");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};return a.support.transition?void this.$element[c](0).one(\"bsTransitionEnd\",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass(\"in\");a.attr(\"aria-expanded\",c),b.toggleClass(\"collapsed\",!c).attr(\"aria-expanded\",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(d){var e=a(this);e.attr(\"data-target\")||d.preventDefault();var f=b(e),g=f.data(\"bs.collapse\"),h=g?\"toggle\":e.data();c.call(f,h)})}(jQuery),+function(a){\"use strict\";function b(b){var c=b.attr(\"data-target\");c||(c=b.attr(\"href\"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\\s]*$)/,\"\"));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass(\"open\")&&(c&&\"click\"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event(\"hide.bs.dropdown\",f)),c.isDefaultPrevented()||(d.attr(\"aria-expanded\",\"false\"),e.removeClass(\"open\").trigger(a.Event(\"hidden.bs.dropdown\",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data(\"bs.dropdown\");d||c.data(\"bs.dropdown\",d=new g(this)),\"string\"==typeof b&&d[b].call(c)})}var e=\".dropdown-backdrop\",f='[data-toggle=\"dropdown\"]',g=function(b){a(b).on(\"click.bs.dropdown\",this.toggle)};g.VERSION=\"3.3.7\",g.prototype.toggle=function(d){var e=a(this);if(!e.is(\".disabled, :disabled\")){var f=b(e),g=f.hasClass(\"open\");if(c(),!g){\"ontouchstart\"in document.documentElement&&!f.closest(\".navbar-nav\").length&&a(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(a(this)).on(\"click\",c);var h={relatedTarget:this};if(f.trigger(d=a.Event(\"show.bs.dropdown\",h)),d.isDefaultPrevented())return;e.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),f.toggleClass(\"open\").trigger(a.Event(\"shown.bs.dropdown\",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(\".disabled, :disabled\")){var e=b(d),g=e.hasClass(\"open\");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger(\"focus\"),d.trigger(\"click\");var h=\" li:not(.disabled):visible a\",i=e.find(\".dropdown-menu\"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:\"\"})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var e=this.options.trigger.split(\" \"),f=e.length;f--;){var g=e[f];if(\"click\"==g)this.$element.on(\"click.\"+this.type,this.options.selector,a.proxy(this.toggle,this));else if(\"manual\"!=g){var h=\"hover\"==g?\"mouseenter\":\"focusin\",i=\"hover\"==g?\"mouseleave\":\"focusout\";this.$element.on(h+\".\"+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+\".\"+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&\"number\"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusin\"==b.type?\"focus\":\"hover\"]=!0),c.tip().hasClass(\"in\")||\"in\"==c.hoverState?void(c.hoverState=\"in\"):(clearTimeout(c.timeout),c.hoverState=\"in\",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){\"in\"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data(\"bs.\"+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c)),b instanceof a.Event&&(c.inState[\"focusout\"==b.type?\"focus\":\"hover\"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState=\"out\",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){\"out\"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr(\"id\",g),this.$element.attr(\"aria-describedby\",g),this.options.animation&&f.addClass(\"fade\");var h=\"function\"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\\s?auto?\\s?/i,j=i.test(h);j&&(h=h.replace(i,\"\")||\"top\"),f.detach().css({top:0,left:0,display:\"block\"}).addClass(h).data(\"bs.\"+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h=\"bottom\"==h&&k.bottom+m>o.bottom?\"top\":\"top\"==h&&k.top-mo.width?\"left\":\"left\"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr(\"data-original-title\")||(\"function\"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data(\"bs.\"+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data(\"bs.\"+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass(\"in\")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off(\".\"+a.type).removeData(\"bs.\"+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.popover\"),f=\"object\"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data(\"bs.popover\",e=new c(this,f)),\"string\"==typeof b&&e[b]())})}var c=function(a,b){this.init(\"popover\",a,b)};if(!a.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");c.VERSION=\"3.3.7\",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'

'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(\".popover-title\")[this.options.html?\"html\":\"text\"](b),a.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof c?\"html\":\"append\":\"text\"](c),a.removeClass(\"fade top bottom left right in\"),a.find(\".popover-title\").html()||a.find(\".popover-title\").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr(\"data-content\")||(\"function\"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){\"use strict\";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data(\"bs.scrollspy\"),f=\"object\"==typeof c&&c;e||d.data(\"bs.scrollspy\",e=new b(this,f)),\"string\"==typeof c&&e[c]()})}b.VERSION=\"3.3.7\",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c=\"offset\",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c=\"position\",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data(\"target\")||b.attr(\"href\"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(\":visible\")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),b.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),h?(b[0].offsetWidth,b.addClass(\"in\")):b.removeClass(\"fade\"),b.parent(\".dropdown-menu\").length&&b.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),e&&e()}var g=d.find(\"> .active\"),h=e&&a.support.transition&&(g.length&&g.hasClass(\"fade\")||!!d.find(\"> .fade\").length);g.length&&h?g.one(\"bsTransitionEnd\",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass(\"in\")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),\"show\")};a(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',e).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',e)}(jQuery),+function(a){\"use strict\";function b(b){return this.each(function(){var d=a(this),e=d.data(\"bs.affix\"),f=\"object\"==typeof b&&b;e||d.data(\"bs.affix\",e=new c(this,f)),\"string\"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on(\"scroll.bs.affix.data-api\",a.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION=\"3.3.7\",c.RESET=\"affix affix-top affix-bottom\",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&\"top\"==this.affixed)return e=a-d&&\"bottom\"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass(\"affix\");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());\"object\"!=typeof d&&(f=e=d),\"function\"==typeof e&&(e=d.top(this.$element)),\"function\"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css(\"top\",\"\");var i=\"affix\"+(h?\"-\"+h:\"\"),j=a.Event(i+\".bs.affix\");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin=\"bottom\"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on(\"load\",function(){a('[data-spy=\"affix\"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.factory('adminData', adminData);\r\n\r\n\t/** @ngInject */\r\n\tfunction adminData($rootScope, $http, $q, $location) {\r\n\t\tvar titlebarUrl = 'https://account-int-stage.trade.tt';\r\n\t\tvar availabilityUrl = 'https://availability-dev.debesys.net/api';\r\n\t\tvar results = [];\r\n\t\tvar service = {\r\n\t\t\tgetToken : getToken,\r\n\t\t\tupdateToken : updateToken,\r\n\t\t\tgetEvents : getEvents,\r\n\t\t\tupdateEvent : updateEvent,\r\n\t\t\tbatchUpdateEvents : batchUpdateEvents,\r\n\t\t\tbatchAddEvent : batchAddEvent,\r\n\t\t\taddEvent : addEvent,\r\n\t\t\tgetUsername : getUsername,\r\n\t\t\tgetNotifications : getNotifications,\r\n\t\t\tpostNotification : postNotification,\r\n\t\t\teditNotification : editNotification,\r\n\t\t\tdeleteUpdate : deleteUpdate,\r\n\t\t\tsendEmail : sendEmail,\r\n\t\t\tdata : results\r\n\t\t};\r\n\r\n\t\treturn service;\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Token\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getToken() {\r\n\t\t\tvar defer = $q.defer();\r\n\r\n\t\t\t// Renew token\r\n\t\t\tfunction getNewToken() {\r\n\t\t\t\tvar titlebarJsUrl = titlebarUrl + '/titlebar/js/titlebar.php?bsver=3.0&message=false&help=false';\r\n\r\n\t\t\t\t$.getScript(titlebarJsUrl).then(function() {\r\n\t\t\t\t\t\tvar request = $(document.body).titlebar({\r\n\t\t\t\t\t\t\tapp: 'TT Status',\r\n\t\t\t\t\t\t\tloginOnTokenFail: true,\r\n\t\t\t\t\t\t\tshowApps: false,\r\n\t\t\t\t\t\t\tloginOnLogOut: true\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\trequest\r\n\t\t\t\t\t\t\t.on('token-received', function(event, token, env) {\r\n\t\t\t\t\t\t\t\t// Get User Name\r\n\t\t\t\t\t\t\t\tgetUsername(token.token).then(function(name) {\r\n\t\t\t\t\t\t\t\t\ttoken['name'] = name;\r\n\r\n\t\t\t\t\t\t\t\t\t// Store token\r\n\t\t\t\t\t\t\t\t\tupdateToken(token);\r\n\r\n\t\t\t\t\t\t\t\t\tdefer.resolve(token);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t.on('token-received-failed', function(response) {\r\n\t\t\t\t\t\t\t\tdefer.reject(response);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Check if token exists\r\n\t\t\tif (localStorage && localStorage.user) {\r\n\t\t\t\tvar user = JSON.parse(localStorage.user);\r\n\r\n\t\t\t\t// Check if token is expired\r\n\t\t\t\tif (moment().unix() < user.expiration)\r\n\t\t\t\t\tdefer.resolve(user);\r\n\t\t\t\telse\r\n\t\t\t\t\tgetNewToken();\r\n\t\t\t} else {\r\n\t\t\t\tgetNewToken();\r\n\t\t\t}\r\n\r\n\t\t\treturn defer.promise;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Token\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateToken(token) {\r\n\t\t\t// Clear data\r\n\t\t\tlocalStorage.removeItem('user');\r\n\r\n\t\t\t// Store new data\r\n\t\t\tlocalStorage.setItem('user', JSON.stringify(token));\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tHandle Success\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction handleSuccess(response, name) {\r\n\t\t\tresults[name] = response.data;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tHandle Error\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction handleError(response) {\r\n\t\t\tthrow response;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet User Info\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction uuidv4() {\r\n\t\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n\t\t\t\tvar r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n\t\t\t\treturn v.toString(16);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet User Info\r\n\t\tNOTE: https://admin-int-stage-sim.trade.tt is being switch to the prod url in\r\n\t\tthe backend (src/Backend/Startup.cs).\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getUsername(token) {\r\n\t\t\tvar host = $location.host();\r\n\t\t\tvar adminApiUrl = 'https://admin-int-stage-sim.trade.tt/api/1/persons/me?request_id=ttstatus-' + host + '--' + uuidv4();\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\turl : adminApiUrl,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+ token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data.aResult[0].oInfo.sFirstName + \" \" + response.data.aResult[0].oInfo.sLastName;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getEvents(token, params) {\r\n\t\t\tvar env = (params.env) ? params.env : 'ext-prod-live';\r\n\t\t\tvar metric = (params.metric) ? params.metric : 'all';\r\n\t\t\tvar name = (params.name) ? params.name : 'any_name';\r\n\t\t\tvar approval_status = (params.approval_status) ? params.approval_status : 'Pending';\r\n\t\t\tvar url = availabilityUrl + '/events/'+env+'/'+metric+'/'+name;\r\n\t\t\tvar requestParam = {\r\n\t\t\t\tstartTime: params.startTime,\r\n\t\t\t\tendTime: params.endTime,\r\n\t\t\t\tapproval_status: (params.approval_status) ? params.approval_status : 'Pending'\r\n\t\t\t};\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t},\r\n\t\t\t\t\tparams:requestParam\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateEvent(token, params) {\r\n\t\t\tvar approval_status = params.approval_status;\r\n\t\t\tvar status_percent = params.status_percent;\r\n\t\t\tvar operator = params.operator;\r\n\t\t\tvar note = params.note;\r\n\t\t\tvar mod_ver = params.mod_ver;\r\n\t\t\tvar url = availabilityUrl + '/event_update/'+params.env+'/'+params.metric+'/'+params.component+'/'+params.event_time+'?approval_status='+approval_status+'&operator='+operator+'¬e='+note+'&mod_ver='+mod_ver;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tBatch Update Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction batchUpdateEvents(token, params) {\r\n\t\t\tvar approval_status = (params.approval_status) ? 'approval_status='+params.approval_status : '';\r\n\t\t\tvar operator = (params.operator) ? '&operator='+params.operator : '';\r\n\t\t\tvar note = (params.note) ? '¬e='+params.note : '';\r\n\t\t\tvar mod_ver = (params.mod_ver) ? '&mod_ver='+params.mod_ver : '';\r\n\t\t\tvar url = availabilityUrl + '/update_events/'+params.env+'?'+approval_status+operator+note+mod_ver;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' : 'Bearer ' + token\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdata : {'events' : params.data}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tBatch Update Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction batchAddEvent(token, params) {\r\n\t\t\tvar approval_status = (params.approval_status) ? 'approval_status='+params.approval_status : '';\r\n\t\t\tvar operator = (params.operator) ? '&operator='+params.operator : '';\r\n\t\t\tvar note = (params.note) ? '¬e='+params.note : '';\r\n\t\t\tvar mod_ver = (params.mod_ver) ? '&mod_ver='+params.mod_ver : '';\r\n\t\t\tvar url = availabilityUrl + '/2/events_bulk_add/'+params.env+'?'+approval_status+operator+note+mod_ver;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' : 'Bearer ' + token\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdata : {'events' : params.selectedComponents}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAdd Event\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction addEvent(token, params) {\r\n\t\t\tvar approval_status = params.approval_status;\r\n\t\t\tvar status_percent = params.status_percent;\r\n\t\t\tvar operator = params.operator;\r\n\t\t\tvar note = params.note;\r\n\t\t\tvar mod_ver = params.mod_ver;\r\n\t\t\tvar url = availabilityUrl + '/event_add/'+params.env+'/'+params.metric+'/'+params.name+'/'+params.event_time+'?approval_status='+approval_status+'&status_percent='+status_percent+'&operator='+operator+'¬e='+note+'&mod_ver='+mod_ver;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' : 'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Notification\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getNotifications(token, params) {\r\n\t\t\tvar start = (params.start_ts) ? '&start_ts='+params.start_ts : '';\r\n\t\t\tvar end = (params.end_ts) ? '&end_ts='+params.end_ts : '';\r\n\t\t\tvar operator = (params.operator) ? '&operator='+params.operator : '';\r\n\t\t\tvar url = availabilityUrl + '/notifications/'+params.env+'?exclude_notification_status_revoked=false&admin_view=true'+start+end+operator;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'GET',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tPost New Notification\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction postNotification(token, params) {\r\n\t\t\tvar notification_type = (params.notification_type) ? '?notification_type='+params.notification_type : '';\r\n\t\t\tvar notification_status = (params.notification_status) ? '¬ification_status='+params.notification_status : '';\r\n\t\t\tvar title = (params.title) ? '&title='+params.title : '';\r\n\t\t\tvar start_ts = (params.start_ts) ? '&start_ts='+params.start_ts : '';\r\n\t\t\tvar resolution_ts = (params.resolution_ts) ? '&resolution_ts='+params.resolution_ts : '';\r\n\t\t\tvar message = (params.message) ? '&message='+params.message : '';\r\n\t\t\tvar customer_action = (params.customer_action) ? '&customer_action='+params.customer_action : '';\r\n\t\t\tvar vendor_name = (params.vendor_name) ? '&vendor_name='+params.vendor_name : '';\r\n\t\t\tvar components_affected = (params.components_affected) ? '&components_affected='+params.components_affected : '';\r\n\t\t\tvar operator = (params.operator) ? '&operator='+params.operator : '';\r\n\r\n\t\t\tvar url = availabilityUrl + '/notifications/'+\r\n\t\t\t\tparams.env+\r\n\t\t\t\tnotification_type+\r\n\t\t\t\tnotification_status+\r\n\t\t\t\ttitle+\r\n\t\t\t\tstart_ts+\r\n\t\t\t\tresolution_ts+\r\n\t\t\t\tmessage+\r\n\t\t\t\tcustomer_action+\r\n\t\t\t\tvendor_name+\r\n\t\t\t\tcomponents_affected+\r\n\t\t\t\toperator;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tEdit Notification\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction editNotification(token, params) {\r\n\t\t\tvar notification_status = (params.notification_status) ? 'notification_status='+params.notification_status : '';\r\n\t\t\tvar title = (params.title) ? '&title='+params.title : '';\r\n\t\t\tvar start_ts = (params.start_ts) ? '&start_ts='+params.start_ts : '';\r\n\t\t\tvar resolution_ts = (params.resolution_ts) ? '&resolution_ts='+params.resolution_ts : '';\r\n\t\t\tvar message = (params.message) ? '&message='+params.message : '';\r\n\t\t\tvar customer_action = (params.customer_action) ? '&customer_action='+params.customer_action : '';\r\n\t\t\tvar vendor_name = (params.vendor_name) ? '&vendor_name='+params.vendor_name : '';\r\n\t\t\tvar message_index = (params.message_index) ? '&message_index='+params.message_index : '';\r\n\t\t\tvar message_ts = (params.message_ts) ? '&message_ts='+params.message_ts : '';\r\n\t\t\tvar components_affected = (params.components_affected) ? '&components_affected='+params.components_affected : '';\r\n\t\t\tvar operator = (params.operator) ? '&operator='+params.operator : '';\r\n\r\n\t\t\tvar url = availabilityUrl + '/notifications/'+params.env+'/'+params.notification_id+'?'+\r\n\t\t\t\tnotification_status+\r\n\t\t\t\ttitle+\r\n\t\t\t\tstart_ts+\r\n\t\t\t\tresolution_ts+\r\n\t\t\t\tmessage+\r\n\t\t\t\tcustomer_action+\r\n\t\t\t\tvendor_name+\r\n\t\t\t\tmessage_index+\r\n\t\t\t\tmessage_ts+\r\n\t\t\t\tcomponents_affected+\r\n\t\t\t\toperator;\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'PUT',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tSend Email\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction sendEmail(token, url, params) {\r\n\t\t\tvar content = {\r\n\t\t\t\tmailChimpName: params.title,\r\n\t\t\t\temailSubject: params.title,\r\n\t\t\t\temailBody: params.body\r\n\t\t\t};\r\n\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'POST',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\tdata: content,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization':'Bearer '+token,\r\n\t\t\t\t\t\t'Content-Type':'application/json'\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tDelete Update\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction deleteUpdate(token, params) {\r\n\t\t\tvar url = availabilityUrl + '/notification/'+params.env+'/'+params.notification_id+'?message_index='+params.message_index+'&operator='+params.operator;\r\n\t\t\treturn $http({\r\n\t\t\t\t\tmethod: 'DELETE',\r\n\t\t\t\t\turl : url,\r\n\t\t\t\t\theaders : {\r\n\t\t\t\t\t\t'Authorization' :'Bearer '+token\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\treturn response.data\r\n\t\t\t\t})\r\n\t\t\t\t.catch(handleError);\r\n\t\t}\r\n\t}\r\n})();\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.controller('ServiceController', ServiceController);\r\n\r\n\t/** @ngInject */\r\n\tfunction ServiceController($rootScope, $scope, $q, $location, $http, $state, $stateParams, $timeout, $anchorScroll, $sce, statusData) {\r\n\t\t// Data\r\n\t\t$scope.environment = statusData.env;\r\n\t\t$scope.availability = null;\r\n\t\t$scope.chart = null;\r\n\t\t$scope.chartParams = {};\r\n\t\t$scope.components = null;\r\n\t\t$scope.serviceName = $stateParams.name;\r\n\t\t$scope.metric = $stateParams.metric;\r\n\t\t$scope.history = [];\r\n\t\t$scope.servicesList = [];\r\n\t\t$scope.componentsList = [];\r\n\t\t$scope.rendered = false;\r\n\r\n\t\t// UI\r\n\t\t$scope.requestStatus = {\r\n\t\t\tdisplay: true,\r\n\t\t\ttype: 'loading',\r\n\t\t\tdetails: 'One moment...'\r\n\t\t};\r\n\t\t$scope.timeRange = 'hour';\r\n\t\t$scope.timeStart = null;\r\n\t\t$scope.timeEnd = null;\r\n\r\n\t\t// Action\r\n\t\t$scope.refreshChart = refreshChart;\r\n\t\t$scope.zoomIn = zoomIn;\r\n\t\t$scope.updateTimeRange = updateTimeRange;\r\n\t\t$scope.showDetails = showDetails;\r\n\r\n\t\t$scope.popoverData = {\r\n\t\t\tnotifications: [],\r\n\t\t\tavailability: null\r\n\t\t};\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Environment\r\n\t\t*****************************************************************************/\r\n\r\n\t\tif ($stateParams.environment) {\r\n\t\t\t$scope.environment = $stateParams.environment;\r\n\r\n\t\t\tstatusData.updateEnv($stateParams.environment);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tScroll to selected component\r\n\t\t*****************************************************************************/\r\n\r\n\t\t$location.hash($stateParams.component);\r\n\r\n\t\tfunction scrollTo() {\r\n\t\t\t$timeout(function() {\r\n\t\t\t\t$anchorScroll.yOffset = 190;\r\n\t\t\t\t$anchorScroll();\r\n\t\t\t}, 100)\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet list of services and components first, if not present\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getLists() {\r\n\t\t\treturn statusData.getLists($scope.environment, true)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t// Clear lists\r\n\t\t\t\t\t$scope.servicesList = [];\r\n\t\t\t\t\t$scope.componentsList = [];\r\n\r\n\t\t\t\t\t// Apply new data\r\n\t\t\t\t\t$scope.servicesList = response.services;\r\n\t\t\t\t\t$scope.componentsList = response.components;\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\t\tgetLists();\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Notifications\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getNotifications() {\r\n\t\t\treturn statusData.getNotifications($scope.environment)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t// Clear old data\r\n\t\t\t\t\t$scope.history = [];\r\n\r\n\t\t\t\t\t// Apply new data\r\n\t\t\t\t\t$scope.history = response.data.notifications;\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Chart Data\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getChartData() {\r\n\t\t\t$rootScope.$broadcast('showSpinner');\r\n\t\t\t$scope.requestStatus.type = 'loading';\r\n\r\n\t\t\treturn statusData.getChartData($scope.chartParams)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\tif ($stateParams.component) {\r\n\t\t\t\t\t\tscrollTo();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$scope.availability = response.availability;\r\n\t\t\t\t\t$scope.components = response.graphSubDataList;\r\n\r\n\t\t\t\t\tif (response.graphSubDataList.length) {\r\n\t\t\t\t\t\t$scope.timeStart = response.graphSubDataList[0].startTime;\r\n\t\t\t\t\t\t$scope.timeEnd = response.graphSubDataList[0].endTime;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Update time stamp\r\n\t\t\t\t\tstatusData.updateTimestamp(moment().format());\r\n\r\n\t\t\t\t\t$rootScope.$broadcast('hideSpinner');\r\n\r\n\t\t\t\t\t// Update Request Status\r\n\t\t\t\t\t$scope.requestStatus.display = false;\r\n\t\t\t\t\t$scope.requestStatus.type = 'success';\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t$rootScope.$broadcast('hideSpinner');\r\n\r\n\t\t\t\t\t// Update Request Status\r\n\t\t\t\t\t$scope.requestStatus.display = true;\r\n\t\t\t\t\t$scope.requestStatus.type = 'error';\r\n\t\t\t\t\t$scope.requestStatus.details = 'We are unable to retrieve the data. Please try refreshing the page.';\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Date Range\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateTimeRange(range, end) {\r\n\t\t\tvar timezone = moment.tz.guess();\r\n\t\t\tvar adjEnd = (end) ? moment(end) : moment();\r\n\t\t\tvar dayEnd = adjEnd.add(1, 'days').startOf('day');\r\n\t\t\tvar param = {\r\n\t\t\t\tparams : {\r\n\t\t\t\t\tservice : $stateParams.name,\r\n\t\t\t\t\tcomponent : '',\r\n\t\t\t\t\tnumberOfPoints : null,\r\n\t\t\t\t\ttimePeriod : '',\r\n\t\t\t\t\tstart: '',\r\n\t\t\t\t\tend: '',\r\n\t\t\t\t\ttimeZone: timezone,\r\n\t\t\t\t\tenvironment: $scope.environment,\r\n\t\t\t\t\tmetric: $scope.metric\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tswitch(range) {\r\n\t\t\t\tcase 'hour':\r\n\t\t\t\t\t// Use current time if end is undefined\r\n\t\t\t\t\tend = (end) ? moment(end).add(1, 'hours').startOf('hour').format() : moment().format();\r\n\r\n\t\t\t\t\tparam.params.end = end;\r\n\t\t\t\t\tparam.params.start = moment(end).subtract(1, 'hours').format();\r\n\t\t\t\t\tparam.params.timePeriod = 'minutes';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'day':\r\n\t\t\t\t\t// Use current time if end is undefined\r\n\t\t\t\t\tend = (end) ? moment(end).add(1, 'days').startOf('day').format() : moment().add(1, 'hours').startOf('hour').format();\r\n\r\n\t\t\t\t\tparam.params.end = end;\r\n\t\t\t\t\tparam.params.start = moment(end).subtract(1, 'days').format();\r\n\t\t\t\t\tparam.params.timePeriod = 'hours';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'week':\r\n\t\t\t\t\tparam.params.end = dayEnd.format();\r\n\t\t\t\t\tparam.params.start = dayEnd.subtract(7, 'days').startOf('day').format();\r\n\t\t\t\t\tparam.params.timePeriod = 'days';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'month':\r\n\t\t\t\t\tparam.params.end = dayEnd.format();\r\n\t\t\t\t\tparam.params.start = dayEnd.subtract(30, 'days').startOf('day').format();\r\n\t\t\t\t\tparam.params.timePeriod = 'days';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t$scope.timeRange = range;\r\n\t\t\t$scope.chartParams = param;\r\n\t\t}\r\n\r\n\t\t// Get data for default time range\r\n\t\tupdateTimeRange($scope.timeRange);\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tRefresh Chart\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction refreshChart() {\r\n\t\t\tvar result = {};\r\n\r\n\t\t\treturn $q.all([\r\n\t\t\t\t\tgetChartData().then(function(r) {\r\n\t\t\t\t\t\tresult.components=r.graphSubDataList\r\n\t\t\t\t\t}),\r\n\t\t\t\t\tgetNotifications().then(function(r) {\r\n\t\t\t\t\t\tresult.notifications=r.data.notifications\r\n\t\t\t\t\t})\r\n\t\t\t\t]).then(function() {\r\n\t\t\t\t\taddVendorFlag(result);\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tShow Details (Popover)\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction showDetails(data, component) {\r\n\t\t\tvar pcnt = (data.availability !== -1) ? true : false;\r\n\t\t\tvar selected = {\r\n\t\t\t\tmetric : component.graphDataCriteria.metric.toLowerCase(),\r\n\t\t\t\tname : component.graphDataCriteria.componentBackendName.toLowerCase()\r\n\t\t\t};\r\n\t\t\tvar selStart = moment(data.startTime).unix();\r\n\t\t\tvar selEnd = (function() {\r\n\t\t\t\tswitch ($scope.timeRange) {\r\n\t\t\t\t\tcase 'hour':\r\n\t\t\t\t\t\treturn moment(data.startTime).endOf('minute').unix();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'day':\r\n\t\t\t\t\t\treturn moment(data.startTime).endOf('hour').unix();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'week':\r\n\t\t\t\t\tcase 'month':\r\n\t\t\t\t\t\treturn moment(data.startTime).endOf('day').unix();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t})();\r\n\r\n\t\t\t// Display Availability Data\r\n\t\t\t$scope.popoverData.availability = data;\r\n\r\n\t\t\t// Clear prev notifications\r\n\t\t\t$scope.popoverData.notifications = [];\r\n\r\n\t\t\tif ($scope.history.length) {\r\n\t\t\t\t// Search through incident history\r\n\t\t\t\tangular.forEach($scope.history, function(notif) {\r\n\t\t\t\t\tif (notif.notification_type!==1) {\r\n\t\t\t\t\t\tvar notifStart = parseInt(notif.start_ts);\r\n\t\t\t\t\t\tvar notifEnd = (notif.resolution_ts) ? parseInt(notif.resolution_ts) : parseInt(notif.last_updated_ts);\r\n\r\n\t\t\t\t\t\t// Check affected components of each incident\r\n\t\t\t\t\t\tangular.forEach(notif.components_affected, function(obj) {\r\n\t\t\t\t\t\t\tvar affected = {\r\n\t\t\t\t\t\t\t\tmetric : obj.metric.toLowerCase(),\r\n\t\t\t\t\t\t\t\tname : obj.name.toLowerCase()\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t// Check if component matches\r\n\t\t\t\t\t\t\tif (affected.metric===selected.metric && affected.name===selected.name) {\r\n\t\t\t\t\t\t\t\t// Check if selected range intersects notification\r\n\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t// pcnt - Availability %\r\n\t\t\t\t\t\t\t\t\t// notifStart - Notification Start Time\r\n\t\t\t\t\t\t\t\t\t// notifEnd - Notification Resolution Time\r\n\t\t\t\t\t\t\t\t\t// selStart - Selected graph bar Start Time\r\n\t\t\t\t\t\t\t\t\t// selEnd - Selected graph bar End Time\r\n\t\t\t\t\t\t\t\t\tpcnt && notif.notification_status===2 && notifStart<=selEnd ||\r\n\t\t\t\t\t\t\t\t\tpcnt && notif.notification_status!==2 && notifStart>=selStart && notifStart<=selEnd ||\r\n\t\t\t\t\t\t\t\t\tpcnt && notif.notification_status!==2 && notifEnd>=selStart && notifEnd<=selEnd ||\r\n\t\t\t\t\t\t\t\t\tpcnt && notif.notification_status!==2 && notifStart<=selStart && notifEnd>=selEnd ||\r\n\t\t\t\t\t\t\t\t\tpcnt && notif.notification_status!==2 && notifStart>=selStart && notifStart<=selEnd\r\n\t\t\t\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\t\t\t// Display relevant notification\r\n\t\t\t\t\t\t\t\t\t$scope.popoverData.notifications.push(notif);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tVendor Issue Indicator\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction addVendorFlag(data) {\r\n\t\t\tvar affected = [];\r\n\r\n\t\t\tangular.forEach(data.notifications, function(notification) {\r\n\t\t\t\t// If vendor incident(4)\r\n\t\t\t\tif (notification.notification_type===4) {\r\n\t\t\t\t\t// Add start time to component object\r\n\t\t\t\t\t_.each(notification.components_affected, function(component) {\r\n\t\t\t\t\t\tcomponent['start_ts'] = notification.start_ts;\r\n\t\t\t\t\t\tcomponent['resolution_ts'] = notification.resolution_ts;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// Update affected list\r\n\t\t\t\t\taffected = _.union(affected, notification.components_affected);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$q.all(affected).then(function(affectedList) {\r\n\t\t\t\t// Use Affected Component List as Reference\r\n\t\t\t\tangular.forEach(affectedList, function(affected) {\r\n\t\t\t\t\tvar affectedComponent = _.find($scope.components, function(component) {\r\n\t\t\t\t\t\tif (affected.metric===$scope.metric && component.graphDataCriteria.componentBackendName===affected.name) {\r\n\t\t\t\t\t\t\t// Add flag to affected data points\r\n\t\t\t\t\t\t\tangular.forEach(component.dataPoints, function(point) {\r\n\t\t\t\t\t\t\t\tvar pcnt = (point.availability !== -1) ? true : false;\r\n\t\t\t\t\t\t\t\tvar incidentStart = affected.start_ts;\r\n\t\t\t\t\t\t\t\tvar incidentEnd = affected.resolution_ts;\r\n\t\t\t\t\t\t\t\tvar pointStart = moment(point.startTime).unix();\r\n\t\t\t\t\t\t\t\tvar pointEnd = (function() {\r\n\t\t\t\t\t\t\t\t\t// Adjust point end time according to time range filter\r\n\t\t\t\t\t\t\t\t\tswitch ($scope.timeRange) {\r\n\t\t\t\t\t\t\t\t\t\tcase 'hour':\r\n\t\t\t\t\t\t\t\t\t\t\treturn moment(point.startTime).endOf('minute').unix();\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase 'day':\r\n\t\t\t\t\t\t\t\t\t\t\treturn moment(point.startTime).endOf('hour').unix();\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\tcase 'week':\r\n\t\t\t\t\t\t\t\t\t\tcase 'month':\r\n\t\t\t\t\t\t\t\t\t\t\treturn moment(point.startTime).endOf('day').unix();\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t})();\r\n\r\n\t\t\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t\t\t// Resolved\r\n\t\t\t\t\t\t\t\t\tpcnt && incidentEnd && incidentStart<=pointStart && incidentEnd>=pointStart || // For \"hours\" time range\r\n\t\t\t\t\t\t\t\t\tpcnt && incidentEnd && incidentStart<=pointEnd && incidentEnd>=pointEnd || // For \"hours\" time range\r\n\t\t\t\t\t\t\t\t\tpcnt && incidentEnd && incidentStart>pointStart && incidentEnd

Impact: 

');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t// Add Customer Action Button\r\n\t\t\t\teditor.addButton('addCustomerAction', {\r\n\t\t\t\t\ttext: 'Customer Action',\r\n\t\t\t\t\ticon: 'plus',\r\n\t\t\t\t\tonclick: function() {\r\n\t\t\t\t\t\teditor.insertContent('

Customer Action: 

');\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Action\r\n\t\t$scope.toggleForm = toggleForm;\r\n\t\t$scope.updateTimeRange = updateTimeRange;\r\n\t\t$scope.removeAffected = removeAffected;\r\n\t\t$scope.addAffected = addAffected;\r\n\t\t$scope.addMultiple = addMultiple;\r\n\t\t$scope.postNotification = postNotification;\r\n\t\t$scope.postUpdate = postUpdate;\r\n\t\t$scope.editNotification = editNotification;\r\n\t\t$scope.clearNotificationForm = clearNotificationForm;\r\n\t\t$scope.editUpdate = editUpdate;\r\n\t\t$scope.deleteUpdate = deleteUpdate;\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tSet Mailchimp URL\r\n\t\t*****************************************************************************/\r\n\t\tvar mailChimpURL = '';\r\n\r\n\t\tstatusData.getSystemEnv().then(function(response) {\r\n\t\t\t$scope.systemEnv = response.data.environment;\r\n\r\n\t\t\tif ($scope.systemEnv === 'Staging') {\r\n\t\t\t\tmailChimpURL = 'https://9w5iws0pb8.execute-api.us-east-1.amazonaws.com/staging';\r\n\t\t\t}\r\n\t\t\telse if ($scope.systemEnv === 'Production') {\r\n\t\t\t\tmailChimpURL = 'https://9w5iws0pb8.execute-api.us-east-1.amazonaws.com/production';\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Environment\r\n\t\t*****************************************************************************/\r\n\r\n\t\tif ($stateParams.environment) {\r\n\t\t\t$scope.environment = $stateParams.environment;\r\n\r\n\t\t\tstatusData.updateEnv($stateParams.environment);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Token\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getToken() {\r\n\t\t\treturn adminData.getToken()\r\n\t\t\t\t.then(function(token) {\r\n\t\t\t\t\treturn token;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\tdetails : 'You are not authorized.'\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet list of services first, if not present\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getLists() {\r\n\t\t\treturn statusData.getLists($scope.environment)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t// Clear lists\r\n\t\t\t\t\t$scope.servicesList = [];\r\n\t\t\t\t\t$scope.componentsList = [];\r\n\r\n\t\t\t\t\t// Apply new data\r\n\t\t\t\t\t$scope.servicesList = response.services;\r\n\t\t\t\t\t$scope.componentsList = response.components;\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Get components & services list on load\r\n\t\tgetLists();\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet list of services first, if not present\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getNotifications(user) {\r\n\t\t\tvar params = {\r\n\t\t\t\tenv: $scope.environment,\r\n\t\t\t\tstart_ts: $scope.timeStart,\r\n\t\t\t\tend_ts: $scope.timeEnd,\r\n\t\t\t\toperator: user.name\r\n\t\t\t};\r\n\r\n\t\t\t// Clear prev data\r\n\t\t\t$scope.notifications = [];\r\n\r\n\t\t\treturn adminData.getNotifications(user.token, params)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t$scope.notifications = (response.notifications) ? response.notifications : [];\r\n\r\n\t\t\t\t\t// Update request state\r\n\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\tdisplay : false,\r\n\t\t\t\t\t\ttype : 'success'\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\tdetails : 'We are unable to retrieve the data. Please try refreshing the page.'\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tHTML Email Functions\r\n\t\tNote: Used when sending New Notifications and Update Notifications\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction formatType(type) {\r\n\t\t\tswitch(type) {\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\ttype = 'General';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\ttype = 'Disruption';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\ttype = 'Maintenance';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\ttype = 'Provider';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\ttype = 'Outage';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn type;\r\n\t\t}\r\n\t\tfunction getColor(type) {\r\n\t\t\tvar color = '#000';\r\n\r\n\t\t\tswitch(type) {\r\n\t\t\t\t// General\r\n\t\t\t\tcase 1:\r\n\t\t\t\t// Maintenance\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\tcolor = '#31708f';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// Disruption\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\tcolor = '#ec971f';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// Provider\r\n\t\t\t\tcase 4:\r\n\t\t\t\t// Outage\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\tcolor = '#a94442';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn color;\r\n\t\t}\r\n\t\tfunction getIcon(type) {\r\n\t\t\tvar iconUrl = '#000';\r\n\r\n\t\t\tswitch(type) {\r\n\t\t\t\t// General\r\n\t\t\t\tcase 1:\r\n\t\t\t\t// Maintenance\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\ticonUrl = 'https://gallery.mailchimp.com/28c68b7375223b0bd44b45cda/images/85a24727-6de3-4754-be62-30bbf6a6e896.png';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// Disruption\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\ticonUrl = 'https://gallery.mailchimp.com/28c68b7375223b0bd44b45cda/images/0330cefd-7bd9-4cba-bcbc-3e16d2d85063.png';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// Provider\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\ticonUrl = 'https://gallery.mailchimp.com/28c68b7375223b0bd44b45cda/images/587326aa-ae13-459f-84d8-6dacf67bc687.png';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// Outage\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\ticonUrl = 'https://gallery.mailchimp.com/28c68b7375223b0bd44b45cda/images/62f8f473-1f3d-4bd8-8c32-4df8d65a49cc.png';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn iconUrl;\r\n\t\t}\r\n\t\tfunction getComponentNames(components) {\r\n\t\t\tvar componentHtml = '';\r\n\r\n\t\t\tangular.forEach(components, function(component) {\r\n\t\t\t\tvar prettyComponentName = $filter('prettyComponent')(component.name, $scope.componentsList);\r\n\t\t\t\tvar prettyMetricName = $filter('prettyService')(component.metric, $scope.servicesList);\r\n\t\t\t\tvar html = ''+prettyMetricName+' : '+prettyComponentName+'';\r\n\r\n\t\t\t\tif (prettyMetricName) {\r\n\t\t\t\t\tcomponentHtml = componentHtml + html;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn componentHtml;\r\n\t\t}\r\n\t\tfunction getFullThread(messages) {\r\n\t\t\tvar messageHtml = '';\r\n\r\n\t\t\tangular.forEach(messages, function(message, i) {\r\n\t\t\t\tif (i===0) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar ts = moment.utc(parseInt(message.ts, 10)*1000).format('MM/DD/YY h:mma z');\r\n\t\t\t\tvar html =\r\n\t\t\t\t'
'+\r\n\t\t\t\t\t'

'+\r\n\t\t\t\t\t\tts + ' | Update'+\r\n\t\t\t\t\t'

'+\r\n\t\t\t\t\t'

'+\r\n\t\t\t\t\t\tmessage.message +\r\n\t\t\t\t\t'

'+\r\n\t\t\t\t\t(message.customer_action ? '

Customer action: ' + message.customer_action +'

' : '') +\r\n\t\t\t\t'
';\r\n\r\n\t\t\t\tmessageHtml = messageHtml + html;\r\n\t\t\t});\r\n\r\n\t\t\treturn messageHtml;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tPost New Notification\r\n\t\tNOTE: Shows confirmation modal\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction postNotification(notification, type) {\r\n\t\t\tvar modalInstance = $uibModal.open({\r\n\t\t\t\twindowClass: 'confirm-post',\r\n\t\t\t\ttemplateUrl: 'confirmPost.html',\r\n\t\t\t\tcontroller: PostModalController,\r\n\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\tnotification: function () {\r\n\t\t\t\t\t\treturn notification;\r\n\t\t\t\t\t},\r\n\t\t\t\t\ttype: function () {\r\n\t\t\t\t\t\treturn type;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Workaround to silence error, triggered by dismissing modal\r\n\t\t\t// This error is caused by the latest update of Angularjs\r\n\t\t\t.result.then(function(){}, function(r){});\r\n\t\t}\r\n\r\n\t\t// Modal Controller\r\n\t\tfunction PostModalController($uibModalInstance, notification, type) {\r\n\t\t\tvar $ctrl = this;\r\n\t\t\tvar components_affected = function() {\r\n\t\t\t\tvar data = [];\r\n\r\n\t\t\t\tangular.forEach(notification.components_affected, function(obj) {\r\n\t\t\t\t\tdata.push({\r\n\t\t\t\t\t\tname: obj.name,\r\n\t\t\t\t\t\tmetric: obj.metric\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (data.length) {\r\n\t\t\t\t\treturn JSON.stringify(data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Data\r\n\t\t\t$ctrl.notification = notification;\r\n\t\t\t$ctrl.servicesList = $scope.servicesList;\r\n\t\t\t$ctrl.componentsList = $scope.componentsList;\r\n\r\n\t\t\t// UI\r\n\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttype: 'success',\r\n\t\t\t\tdetails: ''\r\n\t\t\t};\r\n\r\n\t\t\t// Actions\r\n\t\t\t$ctrl.ok = ok;\r\n\t\t\t$ctrl.cancel = cancel;\r\n\r\n\t\t\t// Confirm Post\r\n\t\t\tfunction newNotification(user) {\r\n\t\t\t\tvar params = {\r\n\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\tnotification_type: notification.notification_type,\r\n\t\t\t\t\tnotification_status: (notification.markResolved) ? 4 : 2,\r\n\t\t\t\t\ttitle: notification.title,\r\n\t\t\t\t\tstart_ts: moment(notification.start_ts).unix(),\r\n\t\t\t\t\tresolution_ts: (notification.markResolved) ? moment(notification.resolution_ts).unix() : '',\r\n\t\t\t\t\tmessage: encodeURIComponent(notification.message),\r\n\t\t\t\t\tcustomer_action: notification.customer_action,\r\n\t\t\t\t\tvendor_name: notification.vendor_name,\r\n\t\t\t\t\tcomponents_affected: components_affected(),\r\n\t\t\t\t\toperator: user.name\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Show loading\r\n\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t\tdetails: 'One moment...'\r\n\t\t\t\t};\r\n\r\n\t\t\t\tadminData.postNotification(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Send Email\r\n\t\t\t\t\t\tif (notification.sendEmail) {\r\n\t\t\t\t\t\t\tvar template =\r\n\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t'TT Status Notification'+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t'
 
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'\"Trading'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

TT Status Notification

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' '+ formatType(notification.notification_type) + (notification.notification_type===4 ? ': ' + notification.vendor_name : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Environment: '+ $filter('prettyEnv')($scope.environment) +''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Started: '+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+ moment.utc(notification.start_ts).format('MM/DD/YY h:mma z') +''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.markResolved ? ' Resolved: '+ moment.utc(notification.resolution_ts).format('MM/DD/YY h:mma z') +'' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.components_affected && notification.components_affected.length ? '
Affected:
'+getComponentNames(notification.components_affected)+'
' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+ notification.title +'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+ notification.message +'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.customer_action ? '

Customer Action:

'+ notification.customer_action +'

' : '')+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

If you have any questions, please contact TT Support:

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
U.S. Toll Free: +1 877 424 8844Singapore: +65 6395 7002
Chicago: +1 312 476 1002Sydney: +61 2 8022 1702
London: +44 20 7621 8181Tokyo: +81 3 4577 8345
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

For the real-time status of all TT services, visit TT Status.

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Please do not reply to this email. Replies are not monitored or answered. To reach a live person at TT, visit https://www.tradingtechnologies.com/contact.'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t'';\r\n\t\t\t\t\t\t\tvar email = {\r\n\t\t\t\t\t\t\t\ttitle: 'TT Status Notification: ' + notification.title,\r\n\t\t\t\t\t\t\t\tbody: template\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t// Show loading\r\n\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t\t\t\t\tdetails: 'Notification posted. Sending email...'\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tadminData.sendEmail(user.token, mailChimpURL, email)\r\n\t\t\t\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t\t\t\t// Show confirmation\r\n\t\t\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t\t\t\tdetails: 'The notification was posted and the email successfully sent.'\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.catch(function(error) {\r\n\t\t\t\t\t\t\t\t\t// Show Error\r\n\t\t\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\t\t\t\t\tdetails: 'The notification was posted, but we were unable to send the email.'\r\n\t\t\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Show confirmation\r\n\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t\tdetails: 'Notification successfully posted.'\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Get new data\r\n\t\t\t\t\t\tgetNotifications(user);\r\n\r\n\t\t\t\t\t\t// Clear add notification form\r\n\t\t\t\t\t\t$scope.clearNotificationForm();\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(error) {\r\n\t\t\t\t\t\t// Show Error\r\n\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\t\tdetails: 'Something went wrong. We were unable to complete your request.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn error;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Submit\r\n\t\t\tfunction ok() {\r\n\t\t\t\tgetToken().then(newNotification);\r\n\t\t\t}\r\n\r\n\t\t\t// Cancel\r\n\t\t\tfunction cancel() {\r\n\t\t\t\t$uibModalInstance.dismiss('cancel');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tEdit Notification\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction editNotification(notification) {\r\n\t\t\treturn getToken().then(function(user) {\r\n\t\t\t\tvar status = '';\r\n\t\t\t\tvar components_affected = function() {\r\n\t\t\t\t\tvar data = [];\r\n\r\n\t\t\t\t\tangular.forEach(notification.components_affected, function(obj) {\r\n\t\t\t\t\t\tdata.push({\r\n\t\t\t\t\t\t\tname: obj.name,\r\n\t\t\t\t\t\t\tmetric: obj.metric\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif (data.length) {\r\n\t\t\t\t\t\treturn JSON.stringify(data);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturn '';\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Marking as resolved\r\n\t\t\t\tif (notification.updateStatusResolved) {\r\n\t\t\t\t\tstatus = 4;\r\n\r\n\t\t\t\t\t// Set message time and resolution time to be the same.\r\n\t\t\t\t\tnotification.message_ts = notification.resolution_ts;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Editing a resolved notification\r\n\t\t\t\tif (notification.notification_status===4) {\r\n\t\t\t\t\tstatus = 4;\r\n\t\t\t\t}\r\n\t\t\t\tif (notification.updateStatusRevoke || notification.notification_status===3) {\r\n\t\t\t\t\tstatus = 3;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add resolution_ts only for revoked and resolved notifications\r\n\t\t\t\tif (!status) {\r\n\t\t\t\t\tnotification.resolution_ts = '';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar params = {\r\n\t\t\t\t\tenv : $scope.environment,\r\n\t\t\t\t\tnotification_id : notification.notification_id,\r\n\t\t\t\t\tnotification_status : status,\r\n\t\t\t\t\ttitle : notification.title,\r\n\t\t\t\t\tstart_ts : (notification.newStartTime) ? moment(notification.newStartTime).unix() : '',\r\n\t\t\t\t\tresolution_ts : (notification.resolution_ts) ? moment(notification.resolution_ts).unix() : '',\r\n\t\t\t\t\tmessage : notification.updateMessage,\r\n\t\t\t\t\tcustomer_action : notification.customer_action,\r\n\t\t\t\t\tvendor_name : notification.vendor_name,\r\n\t\t\t\t\tmessage_index : (notification.message_index) ? notification.message_index : 0,\r\n\t\t\t\t\tmessage_ts : (notification.message_ts) ? moment(notification.message_ts).unix() : 0,\r\n\t\t\t\t\tcomponents_affected : components_affected(),\r\n\t\t\t\t\toperator : user.name\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn adminData.editNotification(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\tgetNotifications(user);\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t}).catch(function(response) {\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'Something went wrong. We were unable to complete your request.'\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tPost Notification Update\r\n\t\tNOTE: Shows confirmation modal\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction postUpdate(notification) {\r\n\t\t\tvar modalInstance = $uibModal.open({\r\n\t\t\t\twindowClass: 'post-update',\r\n\t\t\t\ttemplateUrl: 'postUpdate.html',\r\n\t\t\t\tcontroller: postUpdateModalController,\r\n\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\tnotification: function () {\r\n\t\t\t\t\t\treturn notification;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Workaround to silence error, triggered by dismissing modal\r\n\t\t\t// This error is caused by the latest update of Angularjs\r\n\t\t\t.result.then(function(){}, function(r){});\r\n\t\t}\r\n\r\n\t\t// Modal Controller\r\n\t\tfunction postUpdateModalController($uibModalInstance, notification) {\r\n\t\t\tvar $ctrl = this;\r\n\t\t\tvar components_affected = function() {\r\n\t\t\t\tvar data = [];\r\n\r\n\t\t\t\tangular.forEach(notification.components_affected, function(obj) {\r\n\t\t\t\t\tdata.push({\r\n\t\t\t\t\t\tname: obj.name,\r\n\t\t\t\t\t\tmetric: obj.metric\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (data.length) {\r\n\t\t\t\t\treturn JSON.stringify(data);\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t// Data\r\n\t\t\t$ctrl.notification = notification;\r\n\t\t\t$ctrl.servicesList = $scope.servicesList;\r\n\t\t\t$ctrl.componentsList = $scope.componentsList;\r\n\r\n\t\t\t// UI\r\n\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttype: 'success',\r\n\t\t\t\tdetails: ''\r\n\t\t\t};\r\n\r\n\t\t\t// Actions\r\n\t\t\t$ctrl.ok = ok;\r\n\t\t\t$ctrl.cancel = cancel;\r\n\r\n\t\t\t// Mark notification as Revoked\r\n\t\t\tif (notification.updateStatusRevoke) {\r\n\t\t\t\tnotification.notification_status = 3;\r\n\t\t\t}\r\n\r\n\t\t\t// Mark notification as Resolved\r\n\t\t\tif (notification.updateStatusResolved) {\r\n\t\t\t\tnotification.notification_status = 4;\r\n\t\t\t}\r\n\r\n\t\t\t// Post Update\r\n\t\t\tfunction updateNotification(user) {\r\n\t\t\t\tvar params = {\r\n\t\t\t\t\tenv : $scope.environment,\r\n\t\t\t\t\tnotification_id : notification.notification_id,\r\n\t\t\t\t\tnotification_status : notification.notification_status,\r\n\t\t\t\t\ttitle : notification.title,\r\n\t\t\t\t\tstart_ts : (notification.newStartTime) ? moment(notification.newStartTime).unix() : '',\r\n\t\t\t\t\tresolution_ts : (notification.resolution_ts) ? moment(notification.resolution_ts).unix() : '',\r\n\t\t\t\t\tmessage : encodeURIComponent(notification.updateMessage),\r\n\t\t\t\t\tcustomer_action : notification.customer_action,\r\n\t\t\t\t\tvendor_name : notification.vendor_name,\r\n\t\t\t\t\tmessage_index : (notification.message_index) ? notification.message_index : 0,\r\n\t\t\t\t\tmessage_ts : (notification.message_ts) ? moment(notification.message_ts).unix() : 0,\r\n\t\t\t\t\tcomponents_affected : components_affected(),\r\n\t\t\t\t\toperator : user.name\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Show loading\r\n\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t\tdetails: 'One moment...'\r\n\t\t\t\t};\r\n\r\n\t\t\t\tadminData.editNotification(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\r\n\t\t\t\t\t\tif (notification.sendEmail) {\r\n\t\t\t\t\t\t\tvar template =\r\n\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t'TT Status Notification'+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t'
 
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'\"Trading'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

TT Status Notification Update

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' '+ formatType(notification.notification_type) + (notification.notification_type===4 ? ': ' + notification.vendor_name : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Environment: '+ $filter('prettyEnv')($scope.environment) +''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' Started: '+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+ moment.utc(parseInt(notification.start_ts)*1000).format('MM/DD/YY h:mma z') +''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.updateStatusResolved || notification.notification_status===4 ? ' Resolved: '+ moment.utc(notification.resolution_ts).format('MM/DD/YY h:mma z') +'' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.updateStatusRevoke || notification.notification_status===3 ? ' Revoked' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.components_affected && notification.components_affected.length ? '
Affected:
'+getComponentNames(notification.components_affected)+'
' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

Re: '+ notification.title +'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

Latest Update:

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+ notification.updateMessage +'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.customer_action ? '

Customer Action:

'+ notification.customer_action +'

' : '')+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

Previous Notifications

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

' + moment.utc(parseInt(notification.start_ts, 10)*1000).format('MM/DD/YY h:mma z') + ' | ' + notification.title + '

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

' + notification.messages[0].message + '

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notification.messages[0].customer_action ? '

Customer action: ' + notification.messages[0].customer_action +'

' : '') +\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tgetFullThread(notification.messages)+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

If you have any questions, please contact TT Support:

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
U.S. Toll Free: +1 877 424 8844Singapore: +65 6395 7002
Chicago: +1 312 476 1002Sydney: +61 2 8022 1702
London: +44 20 7621 8181Tokyo: +81 3 4577 8345
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

For the real-time status of all TT services, visit TT Status.

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'Please do not reply to this email. Replies are not monitored or answered. To reach a live person at TT, visit https://www.tradingtechnologies.com/contact.'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'

'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t'
'+\r\n\t\t\t\t\t\t\t\t\t\t''+\r\n\t\t\t\t\t\t\t\t\t'';\r\n\t\t\t\t\t\t\tvar email = {\r\n\t\t\t\t\t\t\t\ttitle: 'Re: TT Status Notification: ' + notification.title,\r\n\t\t\t\t\t\t\t\tbody: template\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t// Update Loading message\r\n\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t\t\t\t\tdetails: 'Update posted. Sending email...'\r\n\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\tadminData.sendEmail(user.token, mailChimpURL, email)\r\n\t\t\t\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t\t\t\t// Show confirmation\r\n\t\t\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t\t\t\tdetails: 'The update was posted and the email successfully sent.'\r\n\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.catch(function(error) {\r\n\t\t\t\t\t\t\t\t\t// Show Error\r\n\t\t\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\t\t\t\t\tdetails: 'The update was posted, but we were unable to send the email.'\r\n\t\t\t\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t\t\t\treturn error;\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Show confirmation\r\n\t\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t\tdetails: 'Update successfully posted.'\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tgetNotifications(user);\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(error) {\r\n\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'Something went wrong. We were unable to complete your request.'\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Submit\r\n\t\t\tfunction ok() {\r\n\t\t\t\tgetToken().then(updateNotification);\r\n\t\t\t}\r\n\r\n\t\t\t// Cancel\r\n\t\t\tfunction cancel() {\r\n\t\t\t\t$uibModalInstance.dismiss('cancel');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tEdit Notification Update\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction editUpdate(index, message, notification) {\r\n\t\t\tvar newNotification = angular.copy(notification);\r\n\t\t\tvar params = {\r\n\t\t\t\tupdateMessage : encodeURIComponent(message.copy.message),\r\n\t\t\t\tnotification_id : notification.notification_id,\r\n\t\t\t\tmessage_index : index+1,\r\n\t\t\t\tmessage_ts: message.copy.message_ts,\r\n\t\t\t\tcustomer_action: message.copy.customer_action\r\n\t\t\t}\r\n\r\n\t\t\teditNotification(params);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tClear Notification Form\r\n\t\tNOTE: API requires index to begin at 1 not 0\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction deleteUpdate(id, index) {\r\n\t\t\treturn getToken().then(function(user) {\r\n\t\t\t\tvar params = {\r\n\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\tnotification_id: id,\r\n\t\t\t\t\tmessage_index: index+1,\r\n\t\t\t\t\toperator: user.name\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn adminData.deleteUpdate(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\tgetNotifications(user);\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t}).catch(function(response) {\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'Something went wrong. We were unable to complete your request.'\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Date Range\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateTimeRange(range) {\r\n\t\t\t$scope.timeRange = range;\r\n\r\n\t\t\tswitch(range) {\r\n\t\t\t\tcase 'hour':\r\n\t\t\t\t\t$scope.timeStart = moment().subtract(1, 'hours').unix();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'day':\r\n\t\t\t\t\t$scope.timeStart = moment().subtract(1, 'days').unix();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'week':\r\n\t\t\t\t\t$scope.timeStart = moment().subtract(7, 'days').unix();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'month':\r\n\t\t\t\t\t$scope.timeStart = moment().subtract(30, 'days').unix();\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'all':\r\n\t\t\t\t\t$scope.timeStart = '';\r\n\t\t\t\t\t$scope.timeEnd = '';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update Notifications when time range changes\r\n\t\t$scope.$watchGroup(['timeRange', 'timeStart'],\r\n\t\t\tfunction(newVal, oldVal, scope) {\r\n\t\t\t\tgetToken().then(getNotifications);\r\n\t\t\t});\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tToggle Form\r\n\t\tNOTE: All editing is done in the \"copy\" object\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction toggleForm(data, showForm) {\r\n\t\t\t// Create copy of original data, used for the edit form.\r\n\t\t\tdata['copy'] = angular.copy(data);\r\n\r\n\t\t\t// For Edit Form\r\n\t\t\tif (showForm==='showEdit') {\r\n\r\n\t\t\t\t// Set resolution timestamp, used for editing message timestamp\r\n\t\t\t\tif (data.resolution_ts)\r\n\t\t\t\t\tdata.copy['resolution_ts'] = new Date(data.resolution_ts*1000);\r\n\t\t\t}\r\n\t\t\t// For Add Update Form\r\n\t\t\tif (showForm==='showAddUpdate') {\r\n\t\t\t\tdata.copy['sendEmail'] = false;\r\n\r\n\t\t\t\t// Format resolution time\r\n\t\t\t\tif (data.notification_status===4)\r\n\t\t\t\t\tdata.copy['resolution_ts'] = new Date(data.resolution_ts*1000);\r\n\t\t\t\telse\r\n\t\t\t\t\tdata.copy['resolution_ts'] = new Date(moment().unix()*1000);\r\n\t\t\t}\r\n\t\t\t// For Edit Updates (Messages) Form\r\n\t\t\tif (showForm==='showEditUpdate') {\r\n\t\t\t\t// Set prev update timestamp, used for editing message timestamp\r\n\t\t\t\tdata.copy['message_ts'] = new Date(data.ts*1000);\r\n\t\t\t}\r\n\r\n\t\t\tif (data[showForm]) {\r\n\t\t\t\tdata[showForm] = false;\r\n\t\t\t} else {\r\n\t\t\t\tdata[showForm] = true;\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tRemove Affected Component\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction removeAffected(component, collection) {\r\n\t\t\tangular.forEach(collection.components_affected, function(obj, i) {\r\n\t\t\t\tif(obj.metric===component.metric&&obj.name===component.name) {\r\n\t\t\t\t\tcollection.components_affected.splice(i, 1);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn component;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAdd Component to Affected Component List\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction addAffected(component, collection) {\r\n\t\t\tvar selected = { 'metric':component.metric, 'name':component.backendName };\r\n\r\n\t\t\tif (!collection.components_affected) {\r\n\t\t\t\tcollection['components_affected'] = [];\r\n\t\t\t}\r\n\r\n\t\t\t// Add component to queue\r\n\t\t\tvar exists = _.findIndex(collection.components_affected, selected);\r\n\r\n\t\t\tif (exists<0) {\r\n\t\t\t\tcollection['components_affected'].push(selected);\r\n\t\t\t}\r\n\r\n\t\t\t// Clear input\r\n\t\t\tcollection['selectedComponent'] = undefined;\r\n\r\n\t\t\treturn component;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAdd Multiple Components to Affected Component List\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction addMultiple() {\r\n\t\t\tvar modalInstance = $uibModal.open({\r\n\t\t\t\twindowClass: 'add-multiple',\r\n\t\t\t\ttemplateUrl: 'addMultiple.html',\r\n\t\t\t\tcontroller: AddModalController,\r\n\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\tservicesList : function() {return $scope.servicesList},\r\n\t\t\t\t\tcomponentsList : function() {return $scope.componentsList},\r\n\t\t\t\t\tnewNotification : function() {return $scope.newNotification},\r\n\t\t\t\t\taddAffected: function() {return $scope.addAffected},\r\n\t\t\t\t\tremoveAffected: function() {return $scope.removeAffected}\r\n\t\t\t\t},\r\n\t\t\t\tsize: 'lg'\r\n\t\t\t})\r\n\t\t\t// Workaround to silence error, triggered by dismissing modal\r\n\t\t\t// This error is caused by the latest update of Angularjs\r\n\t\t\t.result.then(function(){}, function(r){});\r\n\t\t}\r\n\r\n\t\t// Modal Controller\r\n\t\tfunction AddModalController($uibModalInstance, servicesList, componentsList, newNotification, addAffected, removeAffected) {\r\n\t\t\tvar $ctrl = this;\r\n\r\n\t\t\t// Data\r\n\t\t\t$ctrl.servicesList = servicesList;\r\n\t\t\t$ctrl.componentsList = componentsList;\r\n\t\t\t$ctrl.newNotification = newNotification;\r\n\r\n\t\t\t// UI\r\n\t\t\t$ctrl.selectedComponent = {};\r\n\r\n\t\t\t// Actions\r\n\t\t\t$ctrl.addAll = addAll;\r\n\t\t\t$ctrl.ok = ok;\r\n\t\t\t$ctrl.cancel = cancel;\r\n\t\t\t$ctrl.addAffected = addAffected;\r\n\t\t\t$ctrl.removeAffected = removeAffected;\r\n\r\n\t\t\tfunction addAll() {\r\n\t\t\t\tvar components = $filter('filter')(componentsList, $ctrl.selectedComponent.metric);\r\n\r\n\t\t\t\tangular.forEach(components, function(component) {\r\n\t\t\t\t\taddAffected(component, newNotification);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Submit\r\n\t\t\tfunction ok() {\r\n\t\t\t\tgetToken().then();\r\n\t\t\t}\r\n\r\n\t\t\t// Cancel\r\n\t\t\tfunction cancel() {\r\n\t\t\t\t$uibModalInstance.dismiss('cancel');\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tClear Notification Form\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction clearNotificationForm() {\r\n\t\t\t$scope.newNotification = {\r\n\t\t\t\tselectedComponent : undefined,\r\n\t\t\t\tnotification_type : '',\r\n\t\t\t\ttitle : '',\r\n\t\t\t\tstart_ts : new Date(moment().unix()*1000),\r\n\t\t\t\tresolution_ts : new Date(moment().unix()*1000),\r\n\t\t\t\tmessage : '',\r\n\t\t\t\tcomponents_affected : []\r\n\t\t\t};\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Data\r\n\t\t*****************************************************************************/\r\n\r\n\t\t$scope.$on('envUpdated', function(response, env) {\r\n\t\t\t$scope.environment = env;\r\n\t\t\t$scope.requestStatus.type = 'loading';\r\n\t\t\t$scope.requestStatus.details = 'One moment...';\r\n\t\t\t$scope.requestStatus.display = true;\r\n\r\n\t\t\t// Update URL\r\n\t\t\t$state.go('.', { environment:env }, { notify:false });\r\n\r\n\t\t\t// Get Components & Services, then get Notifications\r\n\t\t\tgetLists().then(getToken().then(getNotifications));\r\n\t\t});\r\n\r\n\t\treturn $scope;\r\n\t}\r\n})();\r\n\r\n\n(function() {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t.module('client')\r\n\t.controller('ManageController', ManageController);\r\n\r\n\t/** @ngInject */\r\n\tfunction ManageController($scope, $q, $state, $stateParams, $uibModal, statusData, adminData, $timeout) {\r\n\t\tvar timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n\r\n\t\t// Data\r\n\t\t$scope.events = [];\r\n\t\t$scope.environment = statusData.env;\r\n\t\t$scope.servicesList = [];\r\n\t\t$scope.componentsList = [];\r\n\t\t$scope.componentChart = {};\r\n\t\t$scope.timeRange = 'day';\r\n\t\t$scope.timeStart = moment().subtract(1, 'days').unix();\r\n\t\t$scope.timeEnd = moment().unix();\r\n\t\t$scope.timePeriod = '';\r\n\t\t$scope.selectedComponent = '';\r\n\t\t$scope.selectedService = '';\r\n\t\t$scope.selectedServiceMetric = '';\r\n\t\t$scope.customEvent = {\r\n\t\t\tenv: $scope.environment,\r\n\t\t\tapproval_status: 'Approved',\r\n\t\t\tevent_time: moment().unix(),\r\n\t\t\tmetric: '',\r\n\t\t\tmod_ver: 0,\r\n\t\t\tname: '',\r\n\t\t\tstatus_percent: '',\r\n\t\t\toperator: '',\r\n\t\t\tnote: ''\r\n\t\t};\r\n\r\n\t\t// UI\r\n\t\t$scope.requestStatus = {\r\n\t\t\tdisplay: true,\r\n\t\t\ttype: 'loading',\r\n\t\t\tdetails: 'One moment...'\r\n\t\t};\r\n\t\t$scope.chartReqStatus = {\r\n\t\t\tdisplay: false,\r\n\t\t\ttype: 'success',\r\n\t\t\tdetails: ''\r\n\t\t};\r\n\t\t$scope.showChart = false;\r\n\t\t$scope.showAddEvent = false;\r\n\t\t$scope.eventFilter = {\r\n\t\t\tstart: '',\r\n\t\t\tend: ''\r\n\t\t};\r\n\t\t$scope.pageSize = 100;\r\n\r\n\t\t// Actions\r\n\t\t$scope.getComponent = getComponent;\r\n\t\t$scope.updateTimeRange = updateTimeRange;\r\n\t\t$scope.showAll = showAll;\r\n\t\t$scope.toggleComment = toggleComment;\r\n\t\t$scope.applyAction = applyAction;\r\n\t\t$scope.addEvent = addEvent;\r\n\t\t$scope.rangeFilter = rangeFilter;\r\n\t\t$scope.zoomIn = zoomIn;\r\n\t\t$scope.refreshData = refreshData;\r\n\t\t$scope.batchAdd = batchAdd;\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Environment\r\n\t\t*****************************************************************************/\r\n\r\n\t\tif ($stateParams.environment) {\r\n\t\t\t$scope.environment = $stateParams.environment;\r\n\r\n\t\t\tstatusData.updateEnv($stateParams.environment);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Token\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getToken() {\r\n\t\t\treturn adminData.getToken()\r\n\t\t\t\t.then(function(token) {\r\n\t\t\t\t\treturn token;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\tdetails : 'You are not authorized.'\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet list of services first, if not present\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getLists() {\r\n\t\t\treturn statusData.getLists($scope.environment)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t// Clear lists\r\n\t\t\t\t\t$scope.servicesList = [];\r\n\t\t\t\t\t$scope.componentsList = [];\r\n\r\n\t\t\t\t\t// Apply new data\r\n\t\t\t\t\t$scope.servicesList = response.services;\r\n\t\t\t\t\t$scope.componentsList = response.components;\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Get components & services list, then events, on load\r\n\t\tgetLists().then(getToken().then(getEvents));\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tRefresh Lists and Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction refreshData() {\r\n\t\t\tif ($scope.selectedComponent)\r\n\t\t\t\tgetChartData().then(getToken().then(getEvents));\r\n\t\t\telse\r\n\t\t\t\tgetToken().then(getEvents);\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Chart Data\r\n\t\tNOTE: 'end' and 'start' needs to be string format (2013-03-13T10:13:33-05:00)\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getChartData() {\r\n\t\t\t$scope.chartReqStatus.type = 'loading';\r\n\t\t\t$scope.chartReqStatus.display = true;\r\n\r\n\t\t\tvar param = {\r\n\t\t\t\tparams : {\r\n\t\t\t\t\tservice : $scope.selectedService,\r\n\t\t\t\t\tcomponent : $scope.selectedComponent,\r\n\t\t\t\t\ttimePeriod : $scope.timePeriod,\r\n\t\t\t\t\tstart: $scope.timeStart,\r\n\t\t\t\t\tend: $scope.timeEnd,\r\n\t\t\t\t\ttimeZone: timezone,\r\n\t\t\t\t\tenvironment: $scope.environment,\r\n\t\t\t\t\tmetric: $scope.selectedServiceMetric,\r\n\t\t\t\t\tisCached : false\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn statusData.getChartData(param)\r\n\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t// Clear current chart\r\n\t\t\t\t\t$scope.componentChart = [];\r\n\r\n\t\t\t\t\t// Apply new chart\r\n\t\t\t\t\t$scope.componentChart = response.graphSubDataList[0];\r\n\r\n\t\t\t\t\t// Update Request status\r\n\t\t\t\t\t$scope.chartReqStatus.display = false;\r\n\t\t\t\t\t$scope.chartReqStatus.type = 'success';\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t})\r\n\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t$scope.chartReqStatus.type = 'error';\r\n\t\t\t\t\t$scope.chartReqStatus.details = 'We are unable to retrieve the data. Please try refreshing the page.';\r\n\r\n\t\t\t\t\treturn response;\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Events\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getEvents(user) {\r\n\t\t\t$scope.requestStatus.type = 'loading';\r\n\t\t\t$scope.requestStatus.details = 'One moment...';\r\n\t\t\t$scope.requestStatus.display = true;\r\n\r\n\t\t\tvar params = {\r\n\t\t\t\tenv : $scope.environment,\r\n\t\t\t\tmetric : $scope.selectedServiceMetric,\r\n\t\t\t\tname : $scope.selectedComponent,\r\n\t\t\t\tstartTime: moment($scope.timeStart).unix(),\r\n\t\t\t\tendTime: moment($scope.timeEnd).unix(),\r\n\t\t\t\tapproval_status: 'Approved, Rejected'\r\n\t\t\t};\r\n\r\n\t\t\treturn adminData.getEvents(user.token, params).then(function(response) {\r\n\t\t\t\tvar events = []\r\n\r\n\t\t\t\tif (response.events) {\r\n\t\t\t\t\tevents = response.events;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Apply new events\r\n\t\t\t\t$scope.events = events;\r\n\r\n\t\t\t\t// Update 'last updated' time stamp\r\n\t\t\t\tstatusData.updateTimestamp(moment().format());\r\n\r\n\t\t\t\t// Update request state\r\n\t\t\t\t$scope.requestStatus.display = false;\r\n\t\t\t\t$scope.requestStatus.type = 'success';\r\n\r\n\t\t\t\treturn response;\r\n\t\t\t}).catch(function(response) {\r\n\t\t\t\t$scope.requestStatus.type = 'error';\r\n\t\t\t\t$scope.requestStatus.details = 'We are unable to retrieve the data. Please try refreshing the page.';\r\n\r\n\t\t\t\treturn response;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tShow Add Event Panel\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction showAddEvent(time){\r\n\t\t\t$scope.customEvent.event_time = time;\r\n\t\t\t$scope.showAddEvent = true;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAdd Event\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction addEvent() {\r\n\t\t\treturn getToken().then(function(user) {\r\n\t\t\t\tvar params = $scope.customEvent;\r\n\r\n\t\t\t\tparams['metric'] = $scope.selectedServiceMetric;\r\n\t\t\t\tparams['operator'] = user.name;\r\n\t\t\t\tparams['event_time'] = moment(params.event_time).unix();\r\n\t\t\t\tparams['name'] = $scope.selectedComponent;\r\n\t\t\t\tparams['env'] = $scope.environment;\r\n\r\n\t\t\t\treturn adminData.addEvent(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Reset custom event\r\n\t\t\t\t\t\t$scope.customEvent = {\r\n\t\t\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\t\t\tapproval_status: 'Approved',\r\n\t\t\t\t\t\t\tevent_time: moment().unix(),\r\n\t\t\t\t\t\t\tmetric: '',\r\n\t\t\t\t\t\t\tmod_ver: 0,\r\n\t\t\t\t\t\t\tname: '',\r\n\t\t\t\t\t\t\tstatus_percent: '',\r\n\t\t\t\t\t\t\toperator: '',\r\n\t\t\t\t\t\t\tnote: ''\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\t$scope.showAddEvent = false;\r\n\r\n\t\t\t\t\t\t// Get latest Data\r\n\t\t\t\t\t\trefreshData();\r\n\r\n\t\t\t\t\t\t// Update request state\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : false,\r\n\t\t\t\t\t\t\ttype : 'success'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t}).catch(function(response) {\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'We are unable to retrieve the data. Please try refreshing the page.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tApply Action\r\n\t\tNOTE: When user approves or rejects\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction applyAction(event, action) {\r\n\t\t\treturn getToken().then(function(user) {\r\n\t\t\t\tvar param = {\r\n\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\tmetric: event.metric,\r\n\t\t\t\t\tcomponent: event.name,\r\n\t\t\t\t\tapproval_status: action,\r\n\t\t\t\t\tstatus_percent: event.status_percent,\r\n\t\t\t\t\toperator: user.name,\r\n\t\t\t\t\tevent_time: event.event_time,\r\n\t\t\t\t\tnote: (event.comment) ? event.comment : '',\r\n\t\t\t\t\tmod_ver: event.mod_version\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn adminData.updateEvent(user.token, param)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Get latest Data\r\n\t\t\t\t\t\trefreshData();\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'We are unable to complete the actions you requested. Please refresh the page and try again.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tGet Component Events & Chart\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction getComponent(component) {\r\n\t\t\t// Show Chart\r\n\t\t\t$scope.showChart = true;\r\n\r\n\t\t\t// Update Selected Component & Service\r\n\t\t\t$scope.selectedComponent = component.backendName;\r\n\t\t\t$scope.selectedService = component.service;\r\n\t\t\t$scope.selectedServiceMetric = component.metric;\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Date Range\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction updateTimeRange(range, end) {\r\n\t\t\tvar adjEnd = (end) ? moment(end) : moment();\r\n\t\t\tvar dayEnd = adjEnd.add(1, 'days').startOf('day');\r\n\r\n\t\t\t$scope.timeRange = range;\r\n\r\n\t\t\tswitch(range) {\r\n\t\t\t\tcase 'hour':\r\n\t\t\t\t\t// Use current time if end is undefined\r\n\t\t\t\t\tend = (end) ? moment(end).add(1, 'hours').startOf('hour').format() : moment().format();\r\n\r\n\t\t\t\t\t$scope.timeEnd = end;\r\n\t\t\t\t\t$scope.timeStart = moment(end).subtract(1, 'hours').format();\r\n\t\t\t\t\t$scope.timePeriod = 'minutes';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'day':\r\n\t\t\t\t\t// Use current time if end is undefined\r\n\t\t\t\t\tend = (end) ? moment(end).add(1, 'days').startOf('day').format() : moment().add(1, 'hours').startOf('hour').format();\r\n\r\n\t\t\t\t\t$scope.timeEnd = end;\r\n\t\t\t\t\t$scope.timeStart = moment(end).subtract(1, 'days').format();\r\n\t\t\t\t\t$scope.timePeriod = 'hours';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'week':\r\n\t\t\t\t\t$scope.timeEnd = dayEnd.format();\r\n\t\t\t\t\t$scope.timeStart = dayEnd.subtract(7, 'days').startOf('day').format();\r\n\t\t\t\t\t$scope.timePeriod = 'days';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'month':\r\n\t\t\t\t\t$scope.timeEnd = dayEnd.format();\r\n\t\t\t\t\t$scope.timeStart = dayEnd.subtract(30, 'days').startOf('day').format();\r\n\t\t\t\t\t$scope.timePeriod = 'days';\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Set initial time range\r\n\t\tupdateTimeRange($scope.timeRange);\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tTime Range Filter\r\n\t\tNOTE: Show if event passes time range criteria\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction rangeFilter(event) {\r\n\t\t\tif ($scope.showChart){\r\n\t\t\t\treturn ((moment($scope.timeStart).unix() <= parseInt(event.event_time)) && (parseInt(event.event_time) <= moment($scope.timeEnd).unix()));\r\n\t\t\t} else {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tShow All\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction showAll() {\r\n\t\t\t$scope.showChart = false;\r\n\t\t\t$scope.selectedComponent = '';\r\n\t\t\t$scope.selectedService = '';\r\n\t\t\t$scope.selectedServiceMetric = '';\r\n\t\t\t$scope.search = '';\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tToggle Comment\r\n\t\tNOTE: Hides and shows comment text field for each alert\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction toggleComment(event) {\r\n\t\t\tif (event.showComment) {\r\n\t\t\t\treturn event.showComment = false;\r\n\t\t\t} else {\r\n\t\t\t\treturn event.showComment = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tZoom In (Zoom into specific time range)\r\n\t\tNOTE: 'end' time needs to be in epoch (10-digit) format\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction zoomIn(end) {\r\n\t\t\tswitch ($scope.timeRange) {\r\n\t\t\t\tcase 'month':\r\n\t\t\t\tcase 'week':\r\n\t\t\t\t\tupdateTimeRange('day', end);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'day':\r\n\t\t\t\t\tupdateTimeRange('hour', end);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'hour':\r\n\t\t\t\t\tshowAddEvent(end);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAdd Event to multiple components\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction batchAdd() {\r\n\t\t\tvar modalInstance = $uibModal.open({\r\n\t\t\t\twindowClass: 'modal-batch-add',\r\n\t\t\t\ttemplateUrl: 'batchAdd.html',\r\n\t\t\t\tcontroller: batchAddController,\r\n\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\tservicesList : function() {return $scope.servicesList},\r\n\t\t\t\t\tcomponentsList : function() {return $scope.componentsList}\r\n\t\t\t\t},\r\n\t\t\t\tsize: 'lg'\r\n\t\t\t})\r\n\t\t\t// Workaround to silence error, triggered by dismissing modal\r\n\t\t\t// This error is caused by the latest update of Angularjs\r\n\t\t\t.result.then(function(){}, function(r){});\r\n\t\t}\r\n\r\n\t\t// Modal Controller\r\n\t\tfunction batchAddController($uibModalInstance, $filter, servicesList, componentsList) {\r\n\t\t\tvar $ctrl = this;\r\n\r\n\t\t\t// Data\r\n\t\t\t$ctrl.servicesList = servicesList;\r\n\t\t\t$ctrl.componentsList = componentsList;\r\n\t\t\t$ctrl.selectedService = {};\r\n\t\t\t$ctrl.selectedComponents = [];\r\n\t\t\t$ctrl.eventStatus = null;\r\n\t\t\t$ctrl.eventTime = null;\r\n\t\t\t$ctrl.eventAvailability = '';\r\n\t\t\t$ctrl.eventNote = '';\r\n\r\n\t\t\t// UI\r\n\t\t\t$ctrl.showSelectTimePanel = false;\r\n\t\t\t$ctrl.showAddEventPanel = false;\r\n\t\t\t$ctrl.startTime = moment().subtract(1,'hours').format();\r\n\t\t\t$ctrl.endTime = moment().format();\r\n\t\t\t$ctrl.zoomTime = null;\r\n\t\t\t$ctrl.timeRange = 'hour';\r\n\t\t\t$ctrl.chartPoints = [];\r\n\r\n\t\t\t// Actions\r\n\t\t\t$ctrl.addAll = addAll;\r\n\t\t\t$ctrl.ok = ok;\r\n\t\t\t$ctrl.cancel = cancel;\r\n\t\t\t$ctrl.addAffected = addAffected;\r\n\t\t\t$ctrl.removeAffected = removeAffected;\r\n\t\t\t$ctrl.zoomIn = zoomIn;\r\n\r\n\r\n\t\t\t// Remove Affected Component\r\n\t\t\tfunction removeAffected(component, collection) {\r\n\t\t\t\tangular.forEach(collection, function(obj, i) {\r\n\t\t\t\t\tif(obj.metric===component.metric&&obj.name===component.name) {\r\n\t\t\t\t\t\tcollection.splice(i, 1);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn component;\r\n\t\t\t}\r\n\r\n\t\t\t// Add Component to Affected Component List\r\n\t\t\tfunction addAffected(component, collection) {\r\n\t\t\t\tvar selected = { 'metric':component.metric, 'name':component.backendName };\r\n\r\n\t\t\t\tif (!collection) {\r\n\t\t\t\t\tcollection = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add component to queue\r\n\t\t\t\tvar exists = _.findIndex(collection, selected);\r\n\r\n\t\t\t\tif (exists<0) {\r\n\t\t\t\t\tcollection.push(selected);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Clear input\r\n\t\t\t\tcollection = undefined;\r\n\r\n\t\t\t\treturn component;\r\n\t\t\t}\r\n\r\n\t\t\t// Add all components\r\n\t\t\tfunction addAll() {\r\n\t\t\t\tvar components = $filter('filter')(componentsList, $ctrl.selectedService.metric);\r\n\r\n\t\t\t\tangular.forEach(components, function(component) {\r\n\t\t\t\t\taddAffected(component, $ctrl.selectedComponents);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Generate points for time picker chart\r\n\t\t\tfunction updateChart() {\r\n\t\t\t\tvar startTime;\r\n\t\t\t\tvar endTime;\r\n\t\t\t\tvar chartData = [];\r\n\t\t\t\tvar points;\r\n\t\t\t\tvar unit;\r\n\r\n\t\t\t\tswitch ($ctrl.timeRange) {\r\n\t\t\t\t\tcase 'hour':\r\n\t\t\t\t\t\tpoints = 60;\r\n\t\t\t\t\t\tunit = 'minutes';\r\n\t\t\t\t\t\t// True if Zooming In, see zoomIn()\r\n\t\t\t\t\t\tstartTime = ($ctrl.zoomTime) ? moment($ctrl.zoomTime).subtract(1,'minutes').format() : moment().startOf('minute').subtract(1,'hours').format();\r\n\t\t\t\t\t\tendTime = ($ctrl.zoomTime) ? moment($ctrl.zoomTime).endOf('hour').format() : moment().format();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'day':\r\n\t\t\t\t\t\tpoints = 24;\r\n\t\t\t\t\t\tunit = 'hours';\r\n\t\t\t\t\t\t// True if Zooming In, see zoomIn()\r\n\t\t\t\t\t\tstartTime = ($ctrl.zoomTime) ? moment($ctrl.zoomTime).subtract(1,'hours').format() : moment().startOf('hour').subtract(24,'hours').format();\r\n\t\t\t\t\t\tendTime = ($ctrl.zoomTime) ? moment($ctrl.zoomTime).endOf('day').format() : moment().format();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'week':\r\n\t\t\t\t\t\tpoints = 7;\r\n\t\t\t\t\t\tunit = 'days';\r\n\t\t\t\t\t\tstartTime = moment().startOf('day').subtract(7,'days').format();\r\n\t\t\t\t\t\tendTime = moment().endOf('day').format();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase 'month':\r\n\t\t\t\t\t\tpoints = 30;\r\n\t\t\t\t\t\tunit = 'days';\r\n\t\t\t\t\t\tstartTime = moment().startOf('day').subtract(30,'days').format();\r\n\t\t\t\t\t\tendTime = moment().endOf('day').format();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Build array for chart data\r\n\t\t\t\tfor (var i=0; i= 0) {\r\n\t\t\t\t$scope.selectedEvents.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tToggle Multi Action\r\n\t\tNOTE: Hides and shows the multi-action panel for approving/rejecting items\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction toggleMultiAction() {\r\n\t\t\t// When 1 checkbox is checked\r\n\t\t\tif ($scope.selectedEvents.length >= 1) {\r\n\t\t\t\t$scope.showMultiAction = true;\r\n\t\t\t\t$scope.stopUpdate();\r\n\t\t\t}\r\n\t\t\t// When less than 1 is checked\r\n\t\t\telse {\r\n\t\t\t\t$scope.showMultiAction = false;\r\n\t\t\t\t$scope.startUpdate();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tToggle Select\r\n\t\tNOTE: Selects and deselects all checkboxes\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction toggleSelectAll() {\r\n\t\t\tangular.forEach($scope.events, function(event) {\r\n\t\t\t\tif (!event.actioned) {\r\n\t\t\t\t\ttoggleSelect(event, $scope.toggleSelectAllBool);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tWatcher\r\n\t\t*****************************************************************************/\r\n\r\n\t\t$scope.$watch(function() {return $scope.selectedEvents}, function() {\r\n\t\t\ttoggleMultiAction();\r\n\r\n\t\t\t// Toggle Select All / Deselect All instruction\r\n\t\t\tif ($scope.selectedEvents.length === $scope.events.length) {\r\n\t\t\t\t$scope.toggleSelectAllBool = false;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$scope.selectedEvents.length || $scope.selectedEvents.length < $scope.events.length) {\r\n\t\t\t\t$scope.toggleSelectAllBool = true;\r\n\t\t\t}\r\n\t\t}, true);\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tToggle Comment\r\n\t\tNOTE: Hides and shows comment text field for each alert\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction toggleComment(event) {\r\n\t\t\tif (event.showComment) {\r\n\t\t\t\t$scope.startUpdate();\r\n\t\t\t\treturn event.showComment = false;\r\n\t\t\t} else {\r\n\t\t\t\t$scope.stopUpdate();\r\n\t\t\t\treturn event.showComment = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tApply Action\r\n\t\tNOTE: When user approves or rejects\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction applyAction(event, action) {\r\n\t\t\treturn getToken().then(function(user){\r\n\t\t\t\tvar param = {\r\n\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\tmetric: event.metric,\r\n\t\t\t\t\tcomponent: event.name,\r\n\t\t\t\t\tapproval_status: action,\r\n\t\t\t\t\tstatus_percent: event.status_percent,\r\n\t\t\t\t\toperator: user.name,\r\n\t\t\t\t\tevent_time: event.event_time,\r\n\t\t\t\t\tnote: (event.comment) ? event.comment : '',\r\n\t\t\t\t\tmod_ver: event.mod_version\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (event.showComment) {\r\n\t\t\t\t\ttoggleComment(event);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn adminData.updateEvent(user.token, param)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Update UI\r\n\t\t\t\t\t\tevent.actioned = true;\r\n\t\t\t\t\t\tevent.approval_status = action;\r\n\r\n\t\t\t\t\t\t$rootScope.$broadcast('hideSpinner');\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : false,\r\n\t\t\t\t\t\t\ttype : 'success',\r\n\t\t\t\t\t\t\tdetails: ''\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t\t$rootScope.$broadcast('hideSpinner');\r\n\t\t\t\t\t\t$scope.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay : true,\r\n\t\t\t\t\t\t\ttype : 'error',\r\n\t\t\t\t\t\t\tdetails : 'We are unable to complete the actions you requested. Please refresh the page and try again.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tBatch Action\r\n\t\tNOTE: Shows confirmation modal\r\n\t\t*****************************************************************************/\r\n\r\n\t\tfunction batchAction(action, comment) {\r\n\t\t\tvar modalInstance = $uibModal.open({\r\n\t\t\t\twindowClass: 'confirm-batch-action',\r\n\t\t\t\ttemplateUrl: 'confirmBatchAction.html',\r\n\t\t\t\tbackdrop: 'static',\r\n\t\t\t\tcontroller: ModalController,\r\n\t\t\t\tcontrollerAs: '$ctrl',\r\n\t\t\t\tresolve: {\r\n\t\t\t\t\taction: function() {\r\n\t\t\t\t\t\treturn action;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcomment: function() {\r\n\t\t\t\t\t\treturn comment;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t// Workaround to silence error, triggered by dismissing modal\r\n\t\t\t// This error is caused by the latest update of Angularjs\r\n\t\t\t.result.then(function(){}, function(r){});\r\n\t\t}\r\n\r\n\t\t// Modal Controller\r\n\t\tfunction ModalController($uibModalInstance, action, comment) {\r\n\t\t\tvar $ctrl = this;\r\n\r\n\t\t\t// Data\r\n\t\t\t$ctrl.action = action;\r\n\t\t\t$ctrl.events = $scope.selectedEvents;\r\n\r\n\t\t\t// UI\r\n\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\tdisplay: false,\r\n\t\t\t\ttype: 'success',\r\n\t\t\t\tdetails: ''\r\n\t\t\t};\r\n\r\n\t\t\t// Actions\r\n\t\t\t$ctrl.ok = ok;\r\n\t\t\t$ctrl.cancel = cancel;\r\n\r\n\t\t\t// Confirm Batch Action\r\n\t\t\tfunction confirmBatchAction(user) {\r\n\t\t\t\tvar params = {\r\n\t\t\t\t\tenv: $scope.environment,\r\n\t\t\t\t\tapproval_status: action,\r\n\t\t\t\t\toperator: user.name,\r\n\t\t\t\t\tnote: (comment) ? comment : '',\r\n\t\t\t\t\tmod_ver: 0,\r\n\t\t\t\t\tdata: $scope.selectedEvents\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// Show loading\r\n\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\ttype: 'loading',\r\n\t\t\t\t\tdetails: 'One moment...'\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn adminData.batchUpdateEvents(user.token, params)\r\n\t\t\t\t\t.then(function(response) {\r\n\t\t\t\t\t\t// Clear comments\r\n\t\t\t\t\t\t$scope.batchComment = '';\r\n\r\n\t\t\t\t\t\t// Clear events list\r\n\t\t\t\t\t\t$scope.events = [];\r\n\r\n\t\t\t\t\t\t// Refresh data\r\n\t\t\t\t\t\tgetEvents(user);\r\n\r\n\t\t\t\t\t\t// Hide multi-action panel\r\n\t\t\t\t\t\t$scope.showMultiAction = false;\r\n\r\n\t\t\t\t\t\t// Toggle select all button\r\n\t\t\t\t\t\t$scope.toggleSelectAllBool = true;\r\n\r\n\t\t\t\t\t\t// Update request status\r\n\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\tdetails: $filter('number')(response.data.events.length) + ' event(s) successfully '+response.data.approval_status+'.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function(response) {\r\n\t\t\t\t\t\t// Show loading\r\n\t\t\t\t\t\t$ctrl.requestStatus = {\r\n\t\t\t\t\t\t\tdisplay: true,\r\n\t\t\t\t\t\t\ttype: 'error',\r\n\t\t\t\t\t\t\tdetails: 'We are unable to complete the actions you requested. Please refresh the page and try again.'\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\treturn response;\r\n\t\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t// Submit\r\n\t\t\tfunction ok() {\r\n\t\t\t\tgetToken().then(confirmBatchAction);\r\n\t\t\t}\r\n\r\n\t\t\t// Cancel\r\n\t\t\tfunction cancel() {\r\n\t\t\t\t// Close modal\r\n\t\t\t\t$uibModalInstance.dismiss('cancel');\r\n\r\n\t\t\t\t// Re-init timer\r\n\t\t\t\t$scope.startUpdate();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tSort\r\n\t\t*****************************************************************************/\r\n\r\n\t\t$scope.sortBy = function(key) {\r\n\t\t\t$scope.sort.key = key;\r\n\t\t\t$scope.sort.reverse = ($scope.sort.reverse) ? false : true;\r\n\r\n\t\t\tif (key==='metric') {\r\n\t\t\t\tkey=['-metric' , '-name']\r\n\t\t\t}\r\n\r\n\t\t\t$scope.events = $filter('orderBy')($scope.events, key, $scope.sort.reverse);\r\n\t\t};\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tAuto Update\r\n\t\t*****************************************************************************/\r\n\r\n\t\tvar timer;\r\n\r\n\t\tfunction startUpdate() {\r\n\t\t\t// Stop all running timer\r\n\t\t\t$scope.stopUpdate();\r\n\r\n\t\t\t// Get Data every 2 minutes\r\n\t\t\ttimer = $interval(function() {\r\n\t\t\t\tif ($state.current.name==='admin')\r\n\t\t\t\t\tgetToken().then(getEvents);\r\n\t\t\t}, 30000);\r\n\t\t}\r\n\r\n\t\tfunction stopUpdate() {\r\n\t\t\t$interval.cancel(timer);\r\n\t\t}\r\n\r\n\t\t$scope.$on('$destroy', function() {\r\n\t\t\t$scope.stopUpdate();\r\n\t\t});\r\n\r\n\t\t// Start Timer\r\n\t\t$scope.startUpdate();\r\n\r\n\r\n\t\t/*****************************************************************************\r\n\t\tUpdate Data\r\n\t\t*****************************************************************************/\r\n\r\n\t\t$scope.$on('envUpdated', function(response, env) {\r\n\t\t\t$scope.environment = env;\r\n\t\t\t$rootScope.$broadcast('showSpinner');\r\n\r\n\t\t\t$scope.requestStatus = {\r\n\t\t\t\tdisplay : true,\r\n\t\t\t\ttype : 'loading',\r\n\t\t\t\tdetails : 'One moment...'\r\n\t\t\t};\r\n\r\n\t\t\t// Clear events list\r\n\t\t\t$scope.events = [];\r\n\t\t\t$scope.selectedEvents = [];\r\n\r\n\t\t\t// Stop all running timers\r\n\t\t\t$scope.stopUpdate();\r\n\r\n\t\t\t// Update State Parameter\r\n\t\t\t$state.go('.', { environment:env }, { notify:false });\r\n\r\n\t\t\t// Get new data\r\n\t\t\tgetLists().then(getToken().then(getEvents));\r\n\r\n\t\t\t// Start auto update\r\n\t\t\t$scope.startUpdate();\r\n\t\t});\r\n\r\n\t\treturn $scope;\r\n\t}\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('client')\r\n .run(runBlock);\r\n\r\n /** @ngInject */\r\n function runBlock($log) {\r\n $log.debug('runBlock end');\r\n }\r\n\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('client')\r\n .config(routerConfig);\r\n\r\n /** @ngInject */\r\n function routerConfig($stateProvider, $urlRouterProvider, $locationProvider) {\r\n $stateProvider\r\n .state('home', {\r\n url: '/?environment',\r\n templateUrl: 'app/main/main.html',\r\n controller: 'MainController',\r\n controllerAs: 'main'\r\n })\r\n .state('service', {\r\n url: '/service/:name?environment&component&metric',\r\n templateUrl: 'app/service/service.html',\r\n controller: 'ServiceController',\r\n controllerAs: 'service'\r\n })\r\n .state('admin', {\r\n url: '/admin?environment',\r\n templateUrl: 'app/alerts/alerts.html',\r\n controller: 'AlertsController',\r\n controllerAs: 'alerts'\r\n })\r\n .state('manage', {\r\n url: '/manage?environment',\r\n templateUrl: 'app/manage/manage.html',\r\n controller: 'ManageController',\r\n controllerAs: 'manage'\r\n })\r\n .state('notify', {\r\n url: '/notify?environment',\r\n templateUrl: 'app/notify/notify.html',\r\n controller: 'NotifyController',\r\n controllerAs: 'notify'\r\n });\r\n\r\n $urlRouterProvider.otherwise('/');\r\n }\r\n\r\n})();\r\n\n/* global moment:false */\r\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('client')\r\n .constant('moment', moment)\r\n .constant('_', _);\r\n\r\n})();\r\n\n(function() {\r\n 'use strict';\r\n\r\n angular\r\n .module('client')\r\n .config(config);\r\n\r\n /** @ngInject */\r\n function config($logProvider, $locationProvider) {\r\n // Enable log\r\n $logProvider.debugEnabled(true);\r\n\r\n // Disable URL \"hash bang\" (#!)\r\n $locationProvider.hashPrefix('');\r\n }\r\n\r\n})();\r\n\nangular.module(\"client\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/alerts/alerts.html\",\"
Total: {{events.length | number}}

Batch Approve/Reject

\\\"One

{{ requestStatus.details }}

No events found
0 && event.status_percent<100, \\'down\\':event.status_percent===0}\\\"> {{event.metric|prettyService:servicesList}} : {{event.name}}
Approved Rejected
{{event.event_time * 1000 | date:\\'short\\' }}
{{ event.hint }}
  • {{history.status_percent}}% {{history.note}} {{history.utc_time * 1000 | date:\\'short\\' }} UTC {{history.operator}} Approved Rejected
\");\n$templateCache.put(\"app/main/main.html\",\"

TT® Status

Check this page for the real-time status of TT services. We continuously monitor all services and if there are any interruptions, we will report details here. You can also find information about current, upcoming and past maintenance as well as past incidents here.

{{ status.details }} If you need immediate help, please contact TT Support.

{{group.name}}

History

  • No incidents found in the last 30 days.
  • {{ item.start_ts*1000 | date:\\'MM/dd/yy hh:mm a\\' }} Ongoing Resolved ({{item.resolution_ts*1000 | date:\\'MM/dd/yy hh:mm a\\' }})

    Disruption : Outage : Maintenance : General : Exchange Issue : {{ item.title }}

    • {{ message.ts*1000 | date:\\'MM/dd/yy hh:mm a\\' }}
      Customer Action: {{ message.customer_action }}
    Affected: {{ component.metric | prettyService:servicesList }} : {{component.name | prettyComponent:componentsList}}

Subscribe to our notifications

Required

Subscribe to our notifications

Required
\");\n$templateCache.put(\"app/manage/manage.html\",\"
  • Show All
  • {{component.metric|prettyService:servicesList}} {{component.backendName}}

{{(selectedServiceMetric) && (selectedServiceMetric | prettyService:servicesList)+\\' :\\' || \\'All Components\\'}} {{selectedComponent}}

One moment...
{{ (componentChart.startTime) && (componentChart.startTime | date:\\'MMM d, h:mma\\') || (timeStart | date:\\'MMM d, h:mma\\') }} {{ (componentChart.endTime) && (componentChart.endTime | date:\\'MMM d, h:mma\\') || (timeEnd | date:\\'MMM d, h:mma\\') }}
{{componentChart.availability | truncate:2}}%
Availability data is currently not available
  • 0,\\r\\n\t\t\t\t\t\t\t\t\t\t\t\t\\'up\\':data.availability===100,\\r\\n\t\t\t\t\t\t\t\t\t\t\t\t\\'active\\':data.startTime==customEvent.event_time && showAddEvent\\r\\n\t\t\t\t\t\t\t\t\t\t\t}\\\" uib-tooltip=\\\"{{ (data.availability >= 0) && (data.availability | truncate:2) + \\'%\\' || \\'N/A\\'}}\\\" tooltip-append-to-body=true>{{($first) && \\'From:\\' || \\'\\'}} {{($last) && \\'To:\\' || \\'\\'}} {{ data.startTime | date : \\'hh:mma\\' }} {{ data.startTime | date : \\'HH:mm\\' }} {{ data.startTime | date:\\'M/d\\' }}
Time: {{ customEvent.event_time | date:\\'MMM d, h:mma\\' }} Ongoing {{customEvent.status_percent}}% Enter Availability:
Please add comments Please select status
Total : {{(requestStatus.display) && \\'0\\' || (events.length | number)}}
\\\"One

{{ requestStatus.details }}

No events found
0 && event.status_percent<100, \\'down\\':event.status_percent===0}\\\"> {{event.metric|prettyService:servicesList}} : {{event.name}}
Approved Rejected
{{event.event_time * 1000 | date:\\'short\\' }}
{{ event.hint }}
  • {{event.status_percent | truncate:2}}% {{event.approval_note}} {{(event.approval_utc_time) && (event.approval_utc_time * 1000 | date:\\'short\\') || \\'N/A\\' }} {{(event.approval_operator) && event.approval_operator || \\'N/A\\'}} Approved Rejected
  • {{history.status_percent | truncate:2}}% {{history.note}} {{(history.utc_time) && (history.utc_time * 1000 | date:\\'short\\') || \\'N/A\\' }} {{(history.operator) && history.operator || \\'N/A\\'}} Approved Rejected
\");\n$templateCache.put(\"app/service/service.html\",\"
Back

{{ serviceName }} Availability

This page provides historical availability metrics for TT services. The “7-Days” and “30-Days” views display availability on a per-day basis, while the “1-Day” view displays per-hour availability and the “1-Hour” view displays per-minute availability in local times.

\\\"One

{{ requestStatus.details }} If you need immediate help, please contact TT Support.

% = 0\\\">{{ availability | truncate:2 }}%
One moment...
{{ timeStart | date:\\'MMM d, h:mma\\' }} {{ timeEnd | date:\\'MMM d, h:mma\\' }}
  • % =0\\\">{{ component.availability | truncate:2 }}% {{ component.graphDataCriteria.component }}
    Availability data is currently not available
    • {{($first) && \\'From:\\' || \\'\\'}} {{($last) && \\'To:\\' || \\'\\'}} {{ data.startTime | date:\\'M/d, hh:mma\\' }} {{ data.startTime | date:\\'M/d\\' }} {{ data.startTime | date:\\'HH:mm\\' }}
\");\n$templateCache.put(\"app/notify/notify.html\",\"

Notify

Post Notification

{{component.metric | prettyService:servicesList}} : {{component.name}}
Please complete all form input To post, enter a title
Total: {{filteredNotifications.length | number}}

Notifications

\\\"One

{{ requestStatus.details }}

No notifications found
Disruption Outage Maintenance General Provider : {{ notification.title }} Created: {{ notification.creation_ts*1000 | date:\\'MM/dd/yy hh:mm a\\' }} Scheduled Ongoing Revoked Resolved ({{notification.resolution_ts*1000 | date:\\'MM/dd/yy hh:mm a\\'}}) {{ notification.operator }}
Provider Name: {{(notification.vendor_name) && notification.vendor_name || \\'N/A\\'}}
Affected: {{ component.metric|prettyService:servicesList }} : {{ component.name }}

Edit

Affected: {{ component.metric | prettyService:servicesList }} : {{ component.name }}

Add Update

{{ message.ts*1000 | date:\\'MM/dd/yy hh:mm a\\' }}
{{ message.operator }}
Customer action: {{ message.customer_action }}
\");\n$templateCache.put(\"app/components/adminNav/adminNav.html\",\" Alerts Manage Notify \");\n$templateCache.put(\"app/components/environments/environments.html\",\"Environment
\");\n$templateCache.put(\"app/components/lastUpdated/lastUpdated.html\",\" Updated: {{ newTime | date:\\'h:mm:ssa\\' }} \");\n$templateCache.put(\"app/components/pageAlert/pageAlert.html\",\"
\");\n$templateCache.put(\"app/components/status/status.html\",\" {{ item.name }} \");}]);"],"sourceRoot":"/source/"}