Added hardware sensors functionality
Change-Id: I99435613bb77fc0ff72f046c2dc047b13962a7a3
Signed-off-by: Iftekharul Islam <iislam@us.ibm.com>
diff --git a/app/server-health/controllers/log-controller.html b/app/server-health/controllers/log-controller.html
index 59edc72..a5dc5a7 100644
--- a/app/server-health/controllers/log-controller.html
+++ b/app/server-health/controllers/log-controller.html
@@ -68,4 +68,4 @@
</log-event>
</section>
<dir-pagination-controls template-url="common/directives/dirPagination.tpl.html"></dir-pagination-controls>
-</div> <!-- end event log -->
+</div> <!-- end event log -->
\ No newline at end of file
diff --git a/app/server-health/controllers/sensors-overview-controller.html b/app/server-health/controllers/sensors-overview-controller.html
index fc80405..58028ee 100644
--- a/app/server-health/controllers/sensors-overview-controller.html
+++ b/app/server-health/controllers/sensors-overview-controller.html
@@ -1,44 +1,107 @@
<div id="sensors-overview">
- <div class="row column">
- <h1>Sensors</h1>
- </div>
- <section class="row column">
- <div class="page-header">
- <h2 class="inline h4">Sensors present in the system</h2>
- <a ng-href="data:text/json;charset=utf-8,{{export_data}}" class="inline btn-export float-right" download="{{export_name}}" ng-show="filteredSensorData.length">Export</a>
- </div>
- </section>
+ <div class="row column">
+ <h1>Sensors</h1>
+ </div>
+ <section class="row column">
+ <div class="page-header">
+ <h2 class="inline h4">All sensors present in the system</h2>
+ <a ng-href="data:text/json;charset=utf-8,{{export_data}}" class="inline btn-export float-right" download="{{export_name}}">Export</a>
+ </div>
+ </section>
+ <section class="row column">
+ <!-- search -->
+ <p class="content-label" aria-label="sensors filter">Filter sensors</p>
+ <div class="content__search">
+ <label for="content__search-input">Sensors Search</label>
+ <input id="content__search-input" type="text" ng-model="customSearch" ng-keydown="doSearchOnEnter($event)"/>
+ <input id="content__search-submit" type="submit" class="btn btn-primary" value="Filter" ng-click="doSearchOnClick()"/>
+ </div>
+ <div class="toggle-filter">
+ <p class="content-label">FILTER BY SEVERITY</p>
+ <button class="inline first btn-primary" ng-click="toggleSeverityAll()"
+ ng-class="selectedSeverity.all ? 'btn-primary' : 'btn-secondary'">All
+ </button>
+ <button class="inline " ng-click="toggleSeverity('critical')"
+ ng-class="selectedSeverity.critical ? 'btn-primary' : 'btn-secondary'">Critical
+ </button>
+ <button class="inline" ng-click="toggleSeverity('warning')"
+ ng-class="selectedSeverity.warning ? 'btn-primary' : 'btn-secondary'">Warning
+ </button>
+ </div>
- <section class="row column">
- <!-- search -->
- <div class="content__search">
- <label for="content__search-input">Sensors Search</label>
- <input id="content__search-input" type="text" placeholder="Filter issues" ng-model="customSearch" ng-keydown="doSearchOnEnter($event)"/>
- <input id="content__search-submit" type="submit" class="btn btn-primary" value="Filter" ng-click="doSearchOnClick()"/>
- </div>
- <div class="toggle-filter">
- <button class="inline first btn-primary" ng-click="toggleSeverityAll()"
- ng-class="selectedSeverity.all ? 'btn-primary' : 'btn-secondary'">All
- </button>
- <button class="inline " ng-click="toggleSeverity('critical')"
- ng-class="selectedSeverity.critical ? 'btn-primary' : 'btn-secondary'">Critical
- </button>
- <button class="inline" ng-click="toggleSeverity('warning')"
- ng-class="selectedSeverity.warning ? 'btn-primary' : 'btn-secondary'">Warning
- </button>
- </div>
+ </section> <!-- end search -->
- </section> <!-- end search -->
+ <section id="sensor-categories" class="row column">
+ <div class="row column header-row">
+ <div class="column large-12 header__actions-bar">
+ <p class="inline sensor__title">Sensors</p>
+ <p class="inline sensor__reading">Low critical</p>
+ <p class="inline sensor__reading">Low warning</p>
+ <p class="inline sensor__reading sensor__heading-current">Current</p>
+ <p class="inline sensor__reading">High warning</p>
+ <p class="inline sensor__reading">High critical</p>
+ </div>
+ </div>
+ <!-- sensor -->
+<<<<<<< HEAD
+ <div class="sensor__readings-row" ng-repeat="sensor in (filteredSensorData = data|filter:filterBySeverity|filter:filterBySearchTerms|orderBy:'-order')">
+ <p class="inline sensor__title"><span class="icon" ng-class="{'icon__critical': sensor.status == 'critical', 'icon__warning': sensor.status == 'warning', 'icon__normal': sensor.status == 'normal'}" aria-label="sensor.status" ></span>{{sensor.title}}</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>{{sensor.CriticalLow}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">°</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>{{sensor.WarningLow}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">°</span></p>
+ <p class="inline sensor__reading sensor__current" ng-class="{'sensor__critical': sensor.status == 'critical', 'sensor__warn': sensor.status == 'warning', 'sensor__normal': sensor.status == 'normal'}"><span class="sensor__label">Current</span>{{sensor.Value}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">°</span></span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>{{sensor.WarningHigh}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">°</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>{{sensor.CriticalHigh}}<span class="content-label">{{sensor.unit}}<span ng-if="sensor.unit == 'C'">°</span></p>
+ </div>
+=======
+ <div class="sensor__readings-row" >
+ <p class="inline sensor__title"><span class="icon icon__critical" aria-label="critical"></span>Temperature 5</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>32<span class="content-label">C°</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>45<span class="content-label">C°</span></p>
+ <p class="inline sensor__reading sensor__current sensor__critical "><span class="sensor__label">Current</span>124<span class="content-label">C°</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>105<span class="content-label">C°</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>120<span class="content-label">C°</span></p>
+ </div>
+ <!-- sensor -->
+ <div class="sensor__readings-row" >
+ <p class="inline sensor__title"><span class="icon icon__critical" aria-label="critical"></span>Fan 3</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>100<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>400<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading sensor__current sensor__critical"><span class="sensor__label">Current</span>90<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>2000<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>2500<span class="content-label">rpm</span></p>
+ </div>
+ <!-- sensor -->
+ <div class="sensor__readings-row" >
+ <p class="inline sensor__title"><span class="icon icon__warning" aria-label="warning"></span>Fan 5</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>100<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>400<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading sensor__current sensor__warn"><span class="sensor__label">Current</span>90<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>2000<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>2500<span class="content-label">rpm</span></p>
+ </div>
+ <!-- sensor -->
+ <div class="sensor__readings-row" >
+ <p class="inline sensor__title">Temperature 1</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>100<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>400<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading sensor__current"><span class="sensor__label">Current</span>130<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>2000<span class="content-label">rpm</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>2500<span class="content-label">rpm</span></p>
+ </div>
+ <!-- sensor -->
+ <div class="sensor__readings-row" >
+ <p class="inline sensor__title">Altitude</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low critical</span>--</p>
+ <p class="inline sensor__reading"><span class="sensor__label">Low warning</span>--</p>
+ <p class="inline sensor__reading sensor__current"><span class="sensor__label">Current</span>300<span class="content-label">M</span></p>
+ <p class="inline sensor__reading"><span class="sensor__label">High warning</span>--</p>
+ <p class="inline sensor__reading"><span class="sensor__label">High critical</span>--</p>
+ </div>
+ <!--<a ng-repeat="sensor in (filteredSensorData = data.sensors|filter:filterBySeverity|filter:filterBySearchTerms)" class="sensor__group" href="#/server-health/sensors/{{sensor.type}}">-->
+ <!--<span class="inline priority-tag-circ" ng-class="{'high-priority': sensor.status == 'critical', 'medium-priority': sensor.status == 'warning', 'low-priority': sensor.status == 'normal'}" aria-label="High Priority"></span>{{sensor.title}} ({{sensor.data.length}})-->
+ <!--<p class="inline float-right" ng-class="{'sensor__critical-label': sensor.status == 'critical', 'sensor__warning-label': sensor.status == 'warning', 'sensor__normal-label': sensor.status == 'normal'}">{{sensor.status}}</p>-->
+ <!--</a>-->
- <section id="sensor-categories" class="row column">
- <div class="row column header-row">
- <div class="column large-12 header__actions-bar">
- <p class="inline sensor__heading sensor__category">Sensors</p>
- <p class="inline float-right sensor__heading right">State</p>
- </div>
- </div>
-
- <a ng-repeat="sensor in (filteredSensorData = data.sensors|filter:filterBySeverity|filter:filterBySearchTerms)" class="sensor__group" href="#/server-health/sensors/{{sensor.type}}"> <span class="inline priority-tag-circ" ng-class="{'high-priority': sensor.status == 'critical', 'medium-priority': sensor.status == 'warning', 'low-priority': sensor.status == 'normal'}" aria-label="High Priority"></span>{{sensor.title}} ({{sensor.data.length}}) <p class="inline float-right" ng-class="{'sensor__critical-label': sensor.status == 'critical', 'sensor__warning-label': sensor.status == 'warning', 'sensor__normal-label': sensor.status == 'normal'}">{{sensor.status}}</p></a>
-
- </section>
-</div>
\ No newline at end of file
+>>>>>>> work on sensors page. minor bug fixes. removed thresholds scss file. no longer needed due to design changes.
+ </section>
+</div>
diff --git a/app/server-health/controllers/sensors-overview-controller.js b/app/server-health/controllers/sensors-overview-controller.js
index 213a4e3..d68b31f 100644
--- a/app/server-health/controllers/sensors-overview-controller.js
+++ b/app/server-health/controllers/sensors-overview-controller.js
@@ -64,7 +64,10 @@
}
$scope.toggleSeverityAll = function(){
- $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
+
+ if($scope.selectedSeverity.all !== true){
+ $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
+ }
if($scope.selectedSeverity.all){
$scope.selectedSeverity.normal = false;
diff --git a/app/server-health/controllers/unit-id-controller.js b/app/server-health/controllers/unit-id-controller.js
index 5494c61..fa47781 100644
--- a/app/server-health/controllers/unit-id-controller.js
+++ b/app/server-health/controllers/unit-id-controller.js
@@ -19,26 +19,6 @@
'dataService',
function($scope, $window, APIUtils, dataService, userModel){
$scope.dataService = dataService;
-
- $scope.getLEDState = function(){
- APIUtils.getLEDState(function(state){
- if(state == APIUtils.LED_STATE.on){
- dataService.LED_state = APIUtils.LED_STATE_TEXT.on;
- }else{
- dataService.LED_state = APIUtils.LED_STATE_TEXT.off;
- }
- });
- }
- $scope.toggleLED = function(){
- var toggleState = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
- APIUtils.LED_STATE.off : APIUtils.LED_STATE.on;
- dataService.LED_state = (dataService.LED_state == APIUtils.LED_STATE_TEXT.on) ?
- APIUtils.LED_STATE_TEXT.off : APIUtils.LED_STATE_TEXT.on;
- APIUtils.setLEDState(toggleState, function(status){
- });
- }
-
- $scope.getLEDState();
}
]
);
diff --git a/app/server-health/styles/sensors.scss b/app/server-health/styles/sensors.scss
index f720c3b..cd30d6f 100644
--- a/app/server-health/styles/sensors.scss
+++ b/app/server-health/styles/sensors.scss
@@ -1,4 +1,3 @@
-
@mixin state-label {
text-transform: uppercase;
font-weight: 700;
@@ -7,243 +6,136 @@
$title-minWidth: 210px;
-.sensor__heading {
+.header__actions-bar {
+ padding-left: 1.5em;
font-weight: 700;
- &.middle,
- &.right {
- display: none;
- @media (min-width: 950px) {
- display: inline-block;
- }
+ .sensor__heading-current {
+ padding-right: 1em;
}
}
-.sensor__critical-label {
- color: $thresh-critical;
- @include state-label;
-}
-.sensor__warning-label {
- color: $thresh-warning;
- @include state-label;
+.sensor__heading-current {
+ margin: 0;
+ @include mediaQuery(medium) {
+ margin-left: 10px;
+ margin-right: 10px;
+ }
}
-#sensors-overview {
- .sensor__group {
- position: relative;
- display: block;
- margin: .5em 0;
- background: $white;
- padding: 1.5em 6em 1.5em 3.7em;
- text-decoration: none;
- border: 1px solid $lightgrey;
+.sensor__label {
+ float: left;
+ font-weight: 300;
+ @include mediaQuery(medium) {
+ display: none;
+ }
+}
+
+.sensor__title {
+ min-width: 30%;
+ margin-bottom: 0;
+}
+
+.sensor__reading {
+ width: 100%;
+ text-align: right;
+ margin-bottom: 0;
+ display: none;
+ @include mediaQuery(medium) {
+ display: inline-block;
+ width: auto;
+ min-width: calc(70% * (1 / 5) - 10px);
+ }
+}
+
+.sensor__readings-row {
+ position: relative;
+ display: block;
+ margin: 0;
+ background: $white;
+ text-decoration: none;
+ border: 1px solid $medgrey;
+ background: lighten($lightgrey,1%);
+ margin-top: 1em;
+ @include mediaQuery(medium) {
+ padding: .3em 1em .3em 1.5em;
+ margin-top: 0;
+ border-top: 0;
+ background: transparent;
+ }
+ .icon {
+ margin: -8px 0 -8px -8px;
+ }
+ .sensor__title {
font-weight: 700;
- &:hover {
- background: $lightblue;
+ background: darken($lightgrey, 5%);
+ min-width: 100%;
+ padding: .8em;
+ @include mediaQuery(medium) {
+ min-width: 30%;
+ background: transparent;
+ padding: .5em .5em .5em 0;
+ }
+ }
+ .content-label {
+ font-size: 1em;
+ margin-left: .8em;
+ color: lighten($darkgrey, 10%);
+ }
+ .sensor__reading {
+ @include fontCourierBold;
+ display: block;
+ padding: .3em .8em;
+ @include mediaQuery(medium) {
+ display: inline-block;
+ padding: 0;
+ }
+ }
+ .sensor__current {
+ background: darken($thresh-normal, 3%);
+ margin: 0;
+ @include mediaQuery(medium) {
+ background: $thresh-normal;
+ padding: .7em 1em;
+ margin-left: 10px;
+ margin-right: 10px;
+ }
+ .sensor__label {
+ font-weight: 700;
+ @include mediaQuery(medium) {
+ font-weight:300;
+ }
+ }
+ }
+ .sensor__critical {
+ background: $thresh-critical;
+ color: $white;
+ .content-label {
+ color: $white;
+ }
+ }
+ .sensor__warn {
+ background: $thresh-warning;
+ color: $black;
+ .content-label {
color: $black;
}
- @include mediaQuery(x-large) {
- //max-width: 60%;
- }
}
- .priority-tag-circ {
- position: absolute;
- top: 50%;
- left: 1.2em;
- transform: translateY(-50%);
- }
- .header__actions-bar {
- padding-left: 3.5em;
- padding-right: 7.3em;
- }
+
}
// Sensors
#sensors, #sensors-overview {
- .accord-row {
- padding-left: 3.7em;
- padding-right: 1em;
- }
+
.content__search {
max-width: 100%;
@media(min-width: 1300px) {
- max-width: 50%;
+ max-width: 70%;
}
}
.toggle-filter {
- display: inline-block;
margin-right: 0;
}
}
-#back-link {
- margin: 1em 0 0;
- a {
- text-decoration: none;
- position: relative;
- display: inline-block;
- padding-left: 1.2em;
- font-weight: 700;
- &:before {
- content: '\221F';
- position: absolute;
- top: 50%;
- left: 0;
- transform: translateY(-53%) rotate(45deg);
- display: inline-block;
- margin-right: 6px;
- font-size: 1.1em;
- font-weight: bold;
- text-shadow: 0 0 1px black;
- }
- &:hover {
- text-decoration: underline;
- }
- }
-}
-
-#sensor__details {
- display: block;
- margin-top: .6em;
- position: relative;
- overflow: hidden;
-
- .header__actions-bar {
- position: relative;
- padding: 1em 35px 0 3.7em;
-
- .priority-tag-circ {
- position: absolute;
- left: 1.2em;
- top: 50%;
- transform: translateY(-50%);
- &.high-priority {
- background-color: rgba($critical-darkbg, .3);
- }
- }
- .sensor__category {
- margin: 0;
- color: $white;
- min-width: $title-minWidth;
- }
- }
- .header-row {
- background: $darkpurple;
- }
-
- //Export log
- .btn-export {
- text-transform: capitalize;
- color: $black;
- font-size: .9em;
- font-weight: 700;
- position: relative;
- padding: 0 0 1em 2em;
- &:hover {
- text-decoration: underline;
- }
- }
- .btn-export {
- margin-top: 7px;
- }
- .btn-export:before {
- content: '\21E5';
- position: absolute;
- font-size: 1.7em;
- vertical-align: middle;
- transform: rotate(90deg);
- display: inline-block;
- left: 2px;
- top: -5px;
- }
-
- .sensor__info {
- padding-top: 10px;
- &:hover {
- cursor: pointer;
- }
- }
-
- .accord-row {
- // accordion row
- .priority-tag-circ {
- position: absolute;
- top: 28px;
- left: 1.2em;
- }
-
- }
-
- //Sensor info
- .sensor__title {
- font-weight: 700;
- font-size: 1.1em;
- min-width: $title-minWidth;
- max-width: 78%;
- vertical-align: top;
- }
- .sensors__description {
- font-weight: 400;
- }
-
- .sensor__reading {
- @include fontCourierBold;
- font-size: 1.2em;
- color: $black;
- max-width: 18%;
- }
-
- // Sensor metadata row
- .sensors__metadata-row {
- max-height: 0;
- overflow: hidden;
- -webkit-transition: 0.5s linear max-height;
- transition: 0.5s linear max-height;
- padding: 0;
- @include fastTransition-all;
- @include mediaQuery(large) {
- margin-left: 200px;
- }
- &.active {
- max-height: 1000px; //max-height used to allow flexible height of content and still allow transition
- @include mediaQuery(small) {
- max-height: 1000px;
- }
- @include mediaQuery(medium) {
- max-height: 1000px;
- }
- }
- }
-
- //Sensor Related Items
- .sensors__related {
- width: 100%;
- }
- .sensors__related-label {
- font-weight: 700;
- margin-right: 1.2em;
- padding-top: .3em;
- }
-
- .sensors__related-item {
- margin-right: 1em;
- padding-top: .3em;
- display: inline-block;
- float: left;
- clear: both;
- }
-
- .sensors__icon {
- width: 20px;
- height: 20px;
- font-weight: normal;
- margin-right: .5em;
- margin-top: -3px;
- display: inline-block;
- }
-
-}
-
-//end sensor details
-
-
+//end sensor details
\ No newline at end of file