
<!--
Copyright 2017-present Open Networking Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->


<div class="row">
  <div class="col-sm-10">
    <h3>XOS Monitoring Statistics</h3>
  </div>
  <div class="col-xs-2 text-right">
    <a href="" class="btn btn-default" 
      ng-show="vm.selectedSlice && !vm.showStats"
      ng-click="vm.showStats = true">
      <i class="glyphicon glyphicon-transfer"></i>
    </a>
    <a href="" class="btn btn-default" 
      ng-show="vm.selectedSlice && vm.showStats"
      ng-click="vm.showStats = false">
      <i class="glyphicon glyphicon-transfer"></i>
    </a>
  </div>
</div>

<div class="row" ng-show="vm.loader">
  <div class="col-xs-12">
    <div class="loader">Loading</div>
  </div>
</div>

<section ng-hide="vm.loader" ng-class="{animate: !vm.loader}">
  <div class="row">
    <div class="col-sm-3 service-list">
        <h4>XOS Service: </h4>
        <uib-accordion close-others="true" template-url="templates/accordion.html">
          <uib-accordion-group
            ng-repeat="service in vm.services | orderBy:'-service'"
            template-url="templates/accordion-group.html"
            is-open="vm.accordion.open[service.service]"
            heading="{{service.service}}">
            <h5>Slices:</h5>
            <a ng-repeat="slice in service.slices" 
              ng-class="{active: slice.slice === vm.selectedSlice}"
              ng-click="vm.loadSliceMeter(slice, service.service)"
              href="#" class="list-group-item" >
              {{slice.slice}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>
            </a>
          </uib-accordion-group>
        </uib-accordion>
    </div>
    <section class="side-container col-sm-9">
      <div class="row">
        <!-- STATS -->
        <article ng-hide="!vm.showStats" class="stats animate-slide-left">
          <div class="col-xs-12">
            <div class="list-group">
              <div class="list-group-item">
                <h4>Stats</h4>
              </div>
              <div class="list-group-item">
                <ceilometer-stats ng-if="vm.selectedSlice" name="vm.selectedSlice" tenant="vm.selectedTenant"></ceilometer-stats>
              </div>
            </div>
          </div>
        </article>
        <!-- METERS -->
        <article ng-hide="vm.showStats" class="meters animate-slide-left">
          <div class="alert alert-danger" ng-show="vm.ceilometerError">
            {{vm.ceilometerError}}
          </div>
          <div class="col-sm-4 animate-slide-left" ng-hide="!vm.selectedSlice">
            <div class="list-group">
              <div class="list-group-item">
                <h4>Resources</h4>
              </div>
              <a href="#" 
                ng-click="vm.selectMeters(meters, resource)" 
                class="list-group-item" 
                ng-repeat="(resource, meters) in vm.selectedResources" 
                ng-class="{active: resource === vm.selectedResource}">
                {{resource}} <i class="glyphicon glyphicon-chevron-right pull-right"></i>
              </a>
            </div>
          </div>
          <div class="col-sm-8 animate-slide-left" ng-hide="!vm.selectedMeters">
            <div class="list-group">
              <div class="list-group-item">
                <h4>Meters</h4>
              </div>
              <div class="list-group-item">
                <div class="row">
                  <div class="col-xs-6">
                    <label>Name:</label>
                  </div>
                  <div class="col-xs-3">
                    <label>Unit:</label>
                  </div>
                  <div class="col-xs-3"></div>
                </div>
                <div class="row" ng-repeat="meter in vm.selectedMeters" style="margin-bottom: 10px;">
                  <div class="col-xs-6">
                    {{meter.name}}
                  </div>
                  <div class="col-xs-3">
                    {{meter.unit}}
                  </div>
                  <div class="col-xs-3">
                    <!-- tenant: meter.resource_id -->
                    <a ui-sref="samples({name: meter.name, tenant: meter.resource_id})" class="btn btn-primary">
                      <i class="glyphicon glyphicon-search"></i>
                    </a>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </article>
      </div>
    </section>
  </div>
</section>
<section ng-if="!vm.loader && vm.error">
  <div class="alert alert-danger">
    {{vm.error}}
  </div>
</section>
