You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eagle.apache.org by ha...@apache.org on 2016/12/19 12:50:37 UTC
incubator-eagle git commit: [MINOR] Refine policy detail and logging
format
Repository: incubator-eagle
Updated Branches:
refs/heads/master 725e73377 -> 12a0fb961
[MINOR] Refine policy detail and logging format
Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/12a0fb96
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/12a0fb96
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/12a0fb96
Branch: refs/heads/master
Commit: 12a0fb96144f70a9bd73939d7e968a2160b9999a
Parents: 725e733
Author: Hao Chen <ha...@apache.org>
Authored: Mon Dec 19 20:50:17 2016 +0800
Committer: Hao Chen <ha...@apache.org>
Committed: Mon Dec 19 20:50:17 2016 +0800
----------------------------------------------------------------------
.../service/MetadataServiceClientImpl.java | 8 +-
.../trigger/DynamicPolicyLoader.java | 11 +-
.../app/environment/AbstractEnvironment.java | 7 +-
.../environment/impl/StormExecutionRuntime.java | 8 +-
.../impl/ApplicationHealthCheckServiceImpl.java | 20 +--
.../ApplicationStatusUpdateServiceImpl.java | 22 ++-
.../webapp/app/dev/partials/alert/detail.html | 2 +-
.../app/dev/partials/alert/policyDetail.html | 170 +++++++++----------
8 files changed, 130 insertions(+), 118 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-alert-parent/eagle-alert/alert-common/src/main/java/org/apache/eagle/alert/service/MetadataServiceClientImpl.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert-parent/eagle-alert/alert-common/src/main/java/org/apache/eagle/alert/service/MetadataServiceClientImpl.java b/eagle-core/eagle-alert-parent/eagle-alert/alert-common/src/main/java/org/apache/eagle/alert/service/MetadataServiceClientImpl.java
index 8571e56..4565d96 100644
--- a/eagle-core/eagle-alert-parent/eagle-alert/alert-common/src/main/java/org/apache/eagle/alert/service/MetadataServiceClientImpl.java
+++ b/eagle-core/eagle-alert-parent/eagle-alert/alert-common/src/main/java/org/apache/eagle/alert/service/MetadataServiceClientImpl.java
@@ -150,7 +150,7 @@ public class MetadataServiceClientImpl implements IMetadataServiceClient {
private <T> List<T> list(String path, GenericType<List<T>> type) {
WebResource r = client.resource(basePath + path);
- LOG.info("query URL {}", basePath + path);
+ LOG.info("Requesting {}", basePath + path);
List<T> ret = r.accept(MediaType.APPLICATION_JSON_TYPE).type(MediaType.APPLICATION_JSON).get(type);
return ret;
}
@@ -172,7 +172,7 @@ public class MetadataServiceClientImpl implements IMetadataServiceClient {
}
private <T> T listOne(String path, Class<T> tClz) {
- LOG.info("query URL {}", basePath + path);
+ LOG.info("Requesting {}", basePath + path);
WebResource r = client.resource(basePath + path);
ClientResponse resp = r.accept(MediaType.APPLICATION_JSON_TYPE).type(MediaType.APPLICATION_JSON)
@@ -181,10 +181,10 @@ public class MetadataServiceClientImpl implements IMetadataServiceClient {
try {
return resp.getEntity(tClz);
} catch (Exception e) {
- LOG.warn(" list one entity failed, ignored and continute, path {}, message {}!", path, e.getMessage());
+ LOG.warn("List one entity failed, ignored and continue, path:{}", path, e);
}
} else {
- LOG.warn("fail querying metadata service {} with http status {}", basePath + path, resp.getStatus());
+ LOG.warn("Fail querying metadata service {}, http status: {}", basePath + path, resp.getStatus());
}
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-alert-parent/eagle-alert/alert-coordinator/src/main/java/org/apache/eagle/alert/coordinator/trigger/DynamicPolicyLoader.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-alert-parent/eagle-alert/alert-coordinator/src/main/java/org/apache/eagle/alert/coordinator/trigger/DynamicPolicyLoader.java b/eagle-core/eagle-alert-parent/eagle-alert/alert-coordinator/src/main/java/org/apache/eagle/alert/coordinator/trigger/DynamicPolicyLoader.java
index 07ae966..7d0ead5 100644
--- a/eagle-core/eagle-alert-parent/eagle-alert/alert-coordinator/src/main/java/org/apache/eagle/alert/coordinator/trigger/DynamicPolicyLoader.java
+++ b/eagle-core/eagle-alert-parent/eagle-alert/alert-coordinator/src/main/java/org/apache/eagle/alert/coordinator/trigger/DynamicPolicyLoader.java
@@ -55,7 +55,7 @@ public class DynamicPolicyLoader implements Runnable {
// we should catch every exception to avoid zombile thread
try {
final Stopwatch watch = Stopwatch.createStarted();
- LOG.info("policies loader start.");
+ LOG.info("Starting to load policies");
List<PolicyDefinition> current = client.listPolicies();
Map<String, PolicyDefinition> currPolicies = new HashMap<>();
current.forEach(pe -> currPolicies.put(pe.getName(), pe));
@@ -80,9 +80,10 @@ public class DynamicPolicyLoader implements Runnable {
}
if (!policyChanged) {
- LOG.info("policy is not changed since last run");
+ LOG.info("No policy (totally {}) changed since last round", current.size());
return;
}
+
synchronized (this) {
for (PolicyChangeListener listener : listeners) {
listener.onPolicyChange(current, addedPolicies, removedPolicies, reallyModifiedPolicies);
@@ -90,11 +91,13 @@ public class DynamicPolicyLoader implements Runnable {
}
watch.stop();
- LOG.info("policies loader completed. used time milliseconds: {}", watch.elapsed(TimeUnit.MILLISECONDS));
+
+ LOG.info("Finished loading {} policies, added: {}, removed: {}, modified: {}, taken: {} ms",
+ current.size(), addedPolicies.size(), removedPolicies.size(), potentiallyModifiedPolicies.size(), watch.elapsed(TimeUnit.MILLISECONDS));
// reset cached policies
cachedPolicies = currPolicies;
} catch (Throwable t) {
- LOG.error("error loading policy, but continue to run", t);
+ LOG.warn("Error loading policy, but continue to run", t);
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/AbstractEnvironment.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/AbstractEnvironment.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/AbstractEnvironment.java
index 5032aa6..ec2ffe1 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/AbstractEnvironment.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/AbstractEnvironment.java
@@ -16,9 +16,10 @@
*/
package org.apache.eagle.app.environment;
-import org.apache.eagle.app.messaging.*;
import com.typesafe.config.Config;
import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.eagle.app.messaging.KafkaStreamProvider;
+import org.apache.eagle.app.messaging.StreamProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,7 +45,9 @@ public abstract class AbstractEnvironment implements Environment {
throw new IllegalStateException(sinkProviderClassName + "is not assignable from " + StreamProvider.class.getCanonicalName());
}
StreamProvider instance = (StreamProvider) sinkProviderClass.newInstance();
- LOGGER.info("Loaded {}", instance);
+ if (LOGGER.isDebugEnabled()) {
+ LOGGER.debug("Loaded {}", instance);
+ }
return instance;
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
LOGGER.error(e.getMessage(), e);
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/impl/StormExecutionRuntime.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/impl/StormExecutionRuntime.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/impl/StormExecutionRuntime.java
index a4e9fac..f61a291 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/impl/StormExecutionRuntime.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/environment/impl/StormExecutionRuntime.java
@@ -168,7 +168,7 @@ public class StormExecutionRuntime implements ExecutionRuntime<StormEnvironment,
@Override
public ApplicationEntity.Status status(Application<StormEnvironment, StormTopology> executor, com.typesafe.config.Config config) {
String appId = config.getString("appId");
- LOG.info("Fetching status of topology {} ...", appId);
+ LOG.info("Fetching {} status", appId);
List<TopologySummary> topologySummaries ;
ApplicationEntity.Status status = null;
try {
@@ -186,7 +186,9 @@ public class StormExecutionRuntime implements ExecutionRuntime<StormEnvironment,
} else if (topologySummary.get_status().equalsIgnoreCase("INACTIVE")) {
status = ApplicationEntity.Status.STOPPED;
} else if (topologySummary.get_status().equalsIgnoreCase("KILLED")) {
- status = ApplicationEntity.Status.REMOVED;
+ status = ApplicationEntity.Status.STOPPED;
+ } else {
+ LOG.error("Unknown storm topology ({}) status: {}", topologySummary.get_status(),topologySummary.get_status());
}
}
}
@@ -198,7 +200,7 @@ public class StormExecutionRuntime implements ExecutionRuntime<StormEnvironment,
LOG.error("Got error to fetch status of {}", appId, e);
status = ApplicationEntity.Status.UNKNOWN;
}
- LOG.info("Status of {}: {}", appId, status);
+ LOG.info("{} status is {}", appId, status);
return status;
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationHealthCheckServiceImpl.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationHealthCheckServiceImpl.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationHealthCheckServiceImpl.java
index d1d4360..1607b0f 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationHealthCheckServiceImpl.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationHealthCheckServiceImpl.java
@@ -94,7 +94,7 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
this.config.getConfig(HEALTH_PUBLISHER_PATH).withFallback(this.config.getConfig(SERVICE_PATH)));
}
} catch (Exception e) {
- LOG.warn("exception found when create ApplicationHealthCheckPublisher instance {}", e.getCause());
+ LOG.warn("Exception found when create ApplicationHealthCheckPublisher instance {}", e.getCause());
}
}
}
@@ -114,7 +114,7 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
@Override
public void register(ApplicationEntity appEntity) {
if (environment == null) {
- LOG.warn("environment is null, can not register");
+ LOG.warn("Environment is null, can not register");
return;
}
ApplicationProvider<?> appProvider = applicationProviderService.getApplicationProviderByType(appEntity.getDescriptor().getType());
@@ -125,7 +125,7 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
);
if (!applicationHealthCheck.isPresent()) {
- LOG.warn("application {} does not implement HealthCheck", appEntity.getAppId());
+ LOG.warn("Application {} does not implement HealthCheck", appEntity.getAppId());
return;
}
this.environment.healthChecks().register(appEntity.getAppId(), applicationHealthCheck.get());
@@ -133,7 +133,7 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
synchronized (lock) {
if (!appHealthChecks.containsKey(appEntity.getAppId())) {
appHealthChecks.put(appEntity.getAppId(), applicationHealthCheck);
- LOG.info("successfully register health check for {}", appEntity.getAppId());
+ LOG.info("Successfully register health check for {}", appEntity.getAppId());
}
}
}
@@ -141,19 +141,19 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
@Override
public void unregister(ApplicationEntity appEntity) {
if (environment == null) {
- LOG.warn("environment is null, can not unregister");
+ LOG.warn("Environment is null, can not unregister");
return;
}
this.environment.healthChecks().unregister(appEntity.getAppId());
synchronized (lock) {
appHealthChecks.remove(appEntity.getAppId());
}
- LOG.info("successfully unregister health check for {}", appEntity.getAppId());
+ LOG.info("Successfully unregister health check for {}", appEntity.getAppId());
}
@Override
protected void runOneIteration() throws Exception {
- LOG.info("start application health check");
+ LOG.info("Starting ApplicationHealthCheckService");
registerAll();
boolean isDaily = false;
@@ -185,10 +185,10 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
results.put(appId, result);
}
}
- LOG.info("application {} is healthy", appId);
+ LOG.info("Application {} is healthy", appId);
} else {
results.put(appId, result);
- LOG.warn("application {} is not healthy, {}", appId, result.getMessage(), result.getError());
+ LOG.warn("Application {} is not healthy, {}", appId, result.getMessage(), result.getError());
}
}
@@ -203,7 +203,7 @@ public class ApplicationHealthCheckServiceImpl extends ApplicationHealthCheckSer
hasSendDaily = true;
}
} catch (Exception e) {
- LOG.warn("failed to send email for unhealthy applications", e);
+ LOG.warn("Failed to send email for unhealthy applications", e);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationStatusUpdateServiceImpl.java
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationStatusUpdateServiceImpl.java b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationStatusUpdateServiceImpl.java
index b6b27b2..a1ceb83 100644
--- a/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationStatusUpdateServiceImpl.java
+++ b/eagle-core/eagle-app/eagle-app-base/src/main/java/org/apache/eagle/app/service/impl/ApplicationStatusUpdateServiceImpl.java
@@ -18,8 +18,6 @@ package org.apache.eagle.app.service.impl;
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import com.typesafe.config.Config;
-import com.typesafe.config.ConfigFactory;
import org.apache.eagle.app.service.ApplicationOperations;
import org.apache.eagle.metadata.model.ApplicationEntity;
import org.apache.eagle.metadata.service.ApplicationEntityService;
@@ -31,14 +29,14 @@ import java.util.Collection;
import java.util.concurrent.TimeUnit;
@Singleton
-public class ApplicationStatusUpdateServiceImpl extends ApplicationStatusUpdateService {
+public class ApplicationStatusUpdateServiceImpl extends ApplicationStatusUpdateService {
private static final Logger LOG = LoggerFactory.getLogger(ApplicationStatusUpdateServiceImpl.class);
private final ApplicationEntityService applicationEntityService;
private final ApplicationManagementServiceImpl applicationManagementService;
// default value 30, 30
- private int initialDelay = 30;
- private int period = 30;
+ private int initialDelay = 30;
+ private int period = 30;
@Inject
@@ -49,16 +47,21 @@ public class ApplicationStatusUpdateServiceImpl extends ApplicationStatusUpdate
@Override
protected void runOneIteration() throws Exception {
- LOG.info("Checking app status");
+ LOG.info("Updating application status");
try {
Collection<ApplicationEntity> applicationEntities = applicationEntityService.findAll();
- for (ApplicationEntity applicationEntity: applicationEntities) {
+ if (applicationEntities.size() == 0) {
+ LOG.info("No application installed yet");
+ return;
+ }
+ for (ApplicationEntity applicationEntity : applicationEntities) {
if (applicationEntity.getDescriptor().isExecutable()) {
updateApplicationEntityStatus(applicationEntity);
}
}
+ LOG.info("Updated {} application status", applicationEntities.size());
} catch (Exception e) {
- LOG.error("failed to update app status", e);
+ LOG.error("Failed to update application status", e);
}
}
@@ -68,7 +71,8 @@ public class ApplicationStatusUpdateServiceImpl extends ApplicationStatusUpdate
}
@Override
- public void updateApplicationEntityStatus(Collection<ApplicationEntity> applicationEntities) {}
+ public void updateApplicationEntityStatus(Collection<ApplicationEntity> applicationEntities) {
+ }
@Override
public void updateApplicationEntityStatus(ApplicationEntity applicationEntity) {
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html b/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
index 5f63ccf..2a0f54e 100644
--- a/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
+++ b/eagle-server/src/main/webapp/app/dev/partials/alert/detail.html
@@ -47,7 +47,7 @@
</tr>
<tr>
<th>Alert Policy</th>
- <td colspan="3"><a ui-sref="policyDetail({name: item.policyId})">{{alert.tags.policyId}}</a></td>
+ <td colspan="3"><a ui-sref="policyDetail({name: alert.tags.policyId})">{{alert.tags.policyId}}</a></td>
</tr>
<tr>
<th>Alert Event</th>
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/12a0fb96/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
----------------------------------------------------------------------
diff --git a/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html b/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
index c0ff80a..559785c 100644
--- a/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
+++ b/eagle-server/src/main/webapp/app/dev/partials/alert/policyDetail.html
@@ -55,13 +55,68 @@
<div class="nav-tabs-custom">
<ul class="nav nav-tabs">
<!--li><a href="#statistic" data-toggle="tab">Statistic</a></li-->
- <li class="active"><a href="#setting" data-toggle="tab" ng-click="setTab('setting')">Setting</a></li>
- <li><a href="#assignments" data-toggle="tab" ng-click="setTab('assignments')">Assignments</a></li>
+ <li class="active"><a href="#alerts" data-toggle="tab" ng-click="setTab('alerts')">Alert List</a></li>
<li><a href="#definition" data-toggle="tab" ng-click="setTab('definition')">Alert Definition</a></li>
- <li><a href="#alerts" data-toggle="tab" ng-click="setTab('alerts')">Alert List</a></li>
+ <li><a href="#setting" data-toggle="tab" ng-click="setTab('setting')">Policy Settings</a></li>
+ <li><a href="#assignments" data-toggle="tab" ng-click="setTab('assignments')">Execution Assignments</a></li>
</ul>
<div class="tab-content">
- <div class="tab-pane active" id="setting">
+ <div class="tab-pane active" id="alerts">
+ <div sort-table="alertList">
+ <table class="table table-bordered">
+ <thead>
+ <tr>
+ <th sortpath="timestamp" width="135">
+ Alert Time
+ <span class="fa fa-refresh fa-spin no-animate" ng-show="!alertList._done || isSorting"></span>
+ </th>
+ <th>Alert Subject</th>
+ <th width="10"></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{Time.format(item.timestamp)}}</td>
+ <td class="text-break">
+ {{item.alertSubject}}
+ </td>
+ <td>
+ <a ui-sref="alertDetail({alertId: item.tags.alertId})">Detail</a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+
+ <div class="tab-pane" id="definition">
+ <table class="table">
+ <tbody>
+ <tr>
+ <th width="15%">Category</th>
+ <td>{{policy.alertDefinition.category}}</td>
+ </tr>
+ <tr>
+ <th>Severity</th>
+ <td>
+ <span class="label label-{{Policy.getSeverityClass(policy.alertDefinition.severity)}}">
+ {{policy.alertDefinition.severity}}
+ </span>
+ </td>
+ </tr>
+ <tr>
+ <th>Alert Subject</th>
+ <td><pre>{{policy.alertDefinition.subject}}</pre></td>
+ </tr>
+ <tr>
+ <th>Alert Body</th>
+ <td><pre>{{policy.alertDefinition.body}}</pre></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="tab-pane" id="setting">
<table class="table">
<tbody>
<tr>
@@ -128,98 +183,43 @@
</ul>
</td>
</tr>
- <tr>
- <th class="text-no-break">Execution Plan</th>
- <td><pre>{{executionPlan.policyExecutionPlan.executionPlanDesc}}</pre></td>
- </tr>
+ <!--<tr>-->
+ <!--<th class="text-no-break">Execution Plan</th>-->
+ <!--<td><pre>{{executionPlan.policyExecutionPlan.executionPlanDesc}}</pre></td>-->
+ <!--</tr>-->
</tbody>
</table>
</div>
- <div class="tab-pane" id="statistic">statistic
- </div>
<div class="tab-pane" id="assignments">
<table class="table">
<tbody>
- <tr>
- <th>Version</th>
- <td>{{assignment.version}}</td>
- </tr>
- <tr>
- <th>Queue Id</th>
- <td>{{assignment.queueId}}</td>
- </tr>
- <tr>
- <th class="text-no-break" width="120">working Slots</th>
- <td>
- <div na-block="queue.workingSlots.length > 0">
- <ul class="no-margin">
- <li ng-repeat="slot in queue.workingSlots track by $index">
- <span class="text-primary">{{slot.topologyName}}</span>
- - {{slot.boltId}}
- </li>
- </ul>
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
-
- <div class="tab-pane" id="definition">
- <table class="table">
- <tbody>
- <tr>
- <th width="15%">Category</th>
- <td>{{policy.alertDefinition.category}}</td>
- </tr>
- <tr>
- <th>Severity</th>
- <td>
- <span class="label label-{{Policy.getSeverityClass(policy.alertDefinition.severity)}}">
- {{policy.alertDefinition.severity}}
- </span>
- </td>
- </tr>
- <tr>
- <th>Alert Subject</th>
- <td>{{policy.alertDefinition.subject}}</td>
- </tr>
- <tr>
- <th>Alert Body</th>
- <td><pre>{{policy.alertDefinition.body}}</pre></td>
- </tr>
+ <tr>
+ <th>Assigned Version</th>
+ <td>{{assignment.version}}</td>
+ </tr>
+ <tr>
+ <th>Assigned Queue</th>
+ <td>{{assignment.queueId}}</td>
+ </tr>
+ <tr>
+ <th class="text-no-break" width="120">Assigned Slots</th>
+ <td>
+ <div na-block="queue.workingSlots.length > 0">
+ <ul class="no-margin">
+ <li ng-repeat="slot in queue.workingSlots track by $index">
+ <span class="text-primary">{{slot.topologyName}}</span>
+ - {{slot.boltId}}
+ </li>
+ </ul>
+ </div>
+ </td>
+ </tr>
</tbody>
</table>
</div>
- <div class="tab-pane" id="alerts">
- <div sort-table="alertList">
- <table class="table table-bordered">
- <thead>
- <tr>
- <th sortpath="timestamp" width="135">
- Alert Time
- <span class="fa fa-refresh fa-spin no-animate" ng-show="!alertList._done || isSorting"></span>
- </th>
- <th>Alert Subject</th>
- <th width="10"></th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>{{Time.format(item.timestamp)}}</td>
- <td class="text-break">
- {{item.alertSubject}}
- </td>
- <td>
- <a ui-sref="alertDetail({alertId: item.tags.alertId})">Detail</a>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
+ <!--<div class="tab-pane" id="statistic">statistic</div>-->
</div>
</div>