Migrated most ps-common dependencies to mon-common

Change-Id: I8095e9ae18b2fbd8e95f748a9a0066db90ef57b4
This commit is contained in:
Jonathan Halterman 2014-03-10 11:43:17 -07:00
parent 37009ac9c7
commit 1643d238e6
32 changed files with 122 additions and 280 deletions

55
pom.xml
View File

@ -15,9 +15,10 @@
<properties>
<versionNumber>1.0.0</versionNumber>
<computedVersion>${versionNumber}-SNAPSHOT</computedVersion>
<!-- TODO REMOVE -->
<ps.common.version>1.0.0.295</ps.common.version>
<maas.commons.version>1.0.0.145</maas.commons.version>
<dropwizard.version>0.6.1</dropwizard.version>
<mon.common.version>1.0.0-SNAPSHOT</mon.common.version>
<dropwizard.version>0.7.0-rc1</dropwizard.version>
<skipITs>true</skipITs>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -83,13 +84,13 @@
<dependency>
<groupId>storm</groupId>
<artifactId>storm</artifactId>
<version>0.8.2</version>
<version>0.9.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-util</artifactId>
<version>${ps.common.version}</version>
<artifactId>mon-util</artifactId>
<version>${mon.common.version}</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
@ -97,6 +98,7 @@
</exclusion>
</exclusions>
</dependency>
<!-- TODO REMOVE -->
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-streaming</artifactId>
@ -104,51 +106,38 @@
</dependency>
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-persistence</artifactId>
<version>${ps.common.version}</version>
<artifactId>mon-model</artifactId>
<version>${mon.common.version}</version>
</dependency>
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-messaging</artifactId>
<version>${ps.common.version}</version>
<artifactId>mon-persistence</artifactId>
<version>${mon.common.version}</version>
</dependency>
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>maas-commons</artifactId>
<version>${maas.commons.version}</version>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-db</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.yammer.metrics</groupId>
<artifactId>metrics-guice</artifactId>
<version>2.1.3</version>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-jdbi</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<!-- <dependency> <groupId>org.jodah</groupId> <artifactId>stormcell</artifactId> <version>0.2.0-SNAPSHOT</version>
</dependency> -->
<!-- Test dependencies -->
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-testing</artifactId>
<version>${ps.common.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-messaging</artifactId>
<version>${ps.common.version}</version>
<type>test-jar</type>
<artifactId>mon-testing</artifactId>
<version>${mon.common.version}</version>
<scope>test</scope>
</dependency>
<!-- TODO REMOVE OR MIGRATE ME -->
<dependency>
<groupId>com.hpcloud</groupId>
<artifactId>ps-streaming</artifactId>
@ -164,8 +153,8 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>

View File

@ -1,5 +1,7 @@
package com.hpcloud.mon;
import io.dropwizard.db.DataSourceFactory;
import java.util.Set;
import javax.validation.Valid;
@ -7,10 +9,6 @@ import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotEmpty;
import com.hpcloud.messaging.rabbitmq.RabbitMQConfiguration;
import com.hpcloud.persistence.DatabaseConfiguration;
import com.hpcloud.streaming.storm.amqp.AMQPSpoutConfiguration;
/**
* Thresholding configuration.
*
@ -62,5 +60,5 @@ public class ThresholdingConfiguration {
@Valid @NotNull public RabbitMQConfiguration externalRabbit = new RabbitMQConfiguration();
/** MaaS API database configuration. */
@Valid @NotNull public DatabaseConfiguration database = new DatabaseConfiguration();
@Valid @NotNull public DataSourceFactory database = new DataSourceFactory();
}

View File

@ -6,11 +6,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.hpcloud.maas.common.model.alarm.AlarmExpression;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.CollectdMetrics;
import com.hpcloud.maas.domain.common.AbstractEntity;
import com.hpcloud.mon.common.model.alarm.AlarmExpression;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.domain.common.AbstractEntity;
/**
* An alarm comprised of sub-alarms.
@ -18,8 +17,6 @@ import com.hpcloud.maas.domain.common.AbstractEntity;
* @author Jonathan Halterman
*/
public class Alarm extends AbstractEntity {
private static final long serialVersionUID = -8882458476630030926L;
private String tenantId;
private String name;
private AlarmExpression expression;
@ -176,7 +173,6 @@ public class Alarm extends AbstractEntity {
public void setExpression(String expression) {
this.expression = AlarmExpression.of(expression);
CollectdMetrics.removeUnsupportedDimensions(this.expression);
}
public void setId(String id) {

View File

@ -1,7 +1,7 @@
package com.hpcloud.mon.domain.model;
import com.fasterxml.jackson.annotation.JsonRootName;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmState;
/**
* Represents an alarm state transition having occurred.

View File

@ -2,9 +2,9 @@ package com.hpcloud.mon.domain.model;
import java.io.Serializable;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.domain.common.AbstractEntity;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.domain.common.AbstractEntity;
/**
* Sub-alarm. Decorates an AlarmSubExpression.

View File

@ -3,10 +3,9 @@ package com.hpcloud.mon.domain.model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.util.stats.SlidingWindowStats;
import com.hpcloud.maas.util.stats.Statistics;
import com.hpcloud.maas.util.time.TimeResolution;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.util.stats.SlidingWindowStats;
import com.hpcloud.util.time.TimeResolution;
/**
* Aggregates statistics for a specific SubAlarm.
@ -34,9 +33,9 @@ public class SubAlarmStats {
public SubAlarmStats(SubAlarm subAlarm, TimeResolution timeResolution, long viewEndTimestamp) {
slotWidth = subAlarm.getExpression().getPeriod();
this.subAlarm = subAlarm;
this.stats = new SlidingWindowStats(Statistics.statTypeFor(subAlarm.getExpression()
.getFunction()), timeResolution, slotWidth, subAlarm.getExpression().getPeriods(),
FUTURE_SLOTS, viewEndTimestamp);
this.stats = new SlidingWindowStats(subAlarm.getExpression().getFunction().toStatistic(),
timeResolution, slotWidth, subAlarm.getExpression().getPeriods(), FUTURE_SLOTS,
viewEndTimestamp);
int period = subAlarm.getExpression().getPeriod();
int periodMinutes = period < 60 ? 1 : period / 60; // Assumes the period is in seconds so we
// convert to minutes

View File

@ -1,6 +1,6 @@
package com.hpcloud.mon.domain.service;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.domain.model.Alarm;
/**

View File

@ -2,7 +2,7 @@ package com.hpcloud.mon.domain.service;
import java.util.List;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
/**
* Metric definition data access object.

View File

@ -2,7 +2,7 @@ package com.hpcloud.mon.domain.service;
import java.util.List;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
/**

View File

@ -1,34 +1,10 @@
package com.hpcloud.mon.infrastructure.messaging;
import javax.inject.Singleton;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.hpcloud.messaging.rabbitmq.RabbitMQConfiguration;
import com.hpcloud.messaging.rabbitmq.RabbitMQConnection.RabbitMQConnectionProvider;
import com.hpcloud.messaging.rabbitmq.RabbitMQModule;
import com.hpcloud.messaging.rabbitmq.RabbitMQService;
import com.hpcloud.util.Injector;
public class MessagingModule extends AbstractModule {
private final RabbitMQConfiguration rabbitConfig;
public MessagingModule(RabbitMQConfiguration rabbitConfig) {
this.rabbitConfig = rabbitConfig;
}
@Override
protected void configure() {
if (!Injector.isBound(RabbitMQConnectionProvider.class))
install(new RabbitMQModule());
}
@Provides
@Singleton
public RabbitMQService rabbitMQService() throws Exception {
RabbitMQService rabbitService = new RabbitMQService(rabbitConfig);
rabbitService.start();
return rabbitService;
// TODO bind kafka providers?
}
}

View File

@ -9,12 +9,11 @@ import javax.inject.Inject;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.Handle;
import com.hpcloud.maas.common.model.alarm.AggregateFunction;
import com.hpcloud.maas.common.model.alarm.AlarmOperator;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.CollectdMetrics;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.alarm.AggregateFunction;
import com.hpcloud.mon.common.model.alarm.AlarmOperator;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.AlarmDAO;
@ -51,8 +50,6 @@ public class AlarmDAOImpl implements AlarmDAO {
Map<String, String> dimensions = findDimensionsById(handle, subAlarmId);
AggregateFunction function = AggregateFunction.valueOf((String) row.get("function"));
MetricDefinition metricDef = new MetricDefinition((String) row.get("namespace"), dimensions);
// TODO remove later when collectd supports all dimensions
CollectdMetrics.removeUnsupportedDimensions(metricDef);
AlarmOperator operator = AlarmOperator.valueOf((String) row.get("operator"));
AlarmSubExpression subExpression = new AlarmSubExpression(function, metricDef, operator,
(Double) row.get("threshold"), (Integer) row.get("period"), (Integer) row.get("periods"));

View File

@ -10,8 +10,7 @@ import javax.inject.Inject;
import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.Handle;
import com.hpcloud.maas.common.model.metric.CollectdMetrics;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.service.MetricDefinitionDAO;
/**
@ -47,8 +46,7 @@ public class MetricDefinitionDAOImpl implements MetricDefinitionDAO {
if (dimensionSet != null) {
for (String kvStr : dimensionSet.split(",")) {
String[] kv = kvStr.split("=");
// TODO Remove second conditional in the future
if (kv.length > 1 && CollectdMetrics.isSupportedDimension(namespace, kv[0])) {
if (kv.length > 1) {
if (dimensions == null)
dimensions = new HashMap<String, String>();
dimensions.put(kv[0], kv[1]);

View File

@ -1,5 +1,7 @@
package com.hpcloud.mon.infrastructure.persistence;
import io.dropwizard.db.DataSourceFactory;
import javax.inject.Singleton;
import org.skife.jdbi.v2.DBI;
@ -10,7 +12,6 @@ import com.google.inject.Scopes;
import com.hpcloud.mon.domain.service.AlarmDAO;
import com.hpcloud.mon.domain.service.MetricDefinitionDAO;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.persistence.DatabaseConfiguration;
/**
* Configures persistence related types.
@ -18,9 +19,9 @@ import com.hpcloud.persistence.DatabaseConfiguration;
* @author Jonathan Halterman
*/
public class PersistenceModule extends AbstractModule {
private final DatabaseConfiguration dbConfig;
private final DataSourceFactory dbConfig;
public PersistenceModule(DatabaseConfiguration dbConfig) {
public PersistenceModule(DataSourceFactory dbConfig) {
this.dbConfig = dbConfig;
}

View File

@ -10,10 +10,10 @@ import org.skife.jdbi.v2.DBI;
import org.skife.jdbi.v2.Handle;
import org.skife.jdbi.v2.Query;
import com.hpcloud.maas.common.model.alarm.AggregateFunction;
import com.hpcloud.maas.common.model.alarm.AlarmOperator;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.alarm.AggregateFunction;
import com.hpcloud.mon.common.model.alarm.AlarmOperator;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.persistence.SqlStatements;
@ -58,8 +58,8 @@ public class SubAlarmDAOImpl implements SubAlarmDAO {
metricDefinition.dimensions.size());
}
Query<Map<String, Object>> query = h.createQuery(sql).bind("namespace",
metricDefinition.namespace);
Query<Map<String, Object>> query = h.createQuery(sql)
.bind("namespace", metricDefinition.name);
List<Map<String, Object>> rows = query.list();
List<SubAlarm> subAlarms = new ArrayList<SubAlarm>(rows.size());

View File

@ -1,8 +1,11 @@
package com.hpcloud.mon.infrastructure.thresholding;
import io.dropwizard.db.DataSourceFactory;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.fileupload.util.Streams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -12,20 +15,18 @@ import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Tuple;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.messaging.rabbitmq.RabbitMQConfiguration;
import com.hpcloud.messaging.rabbitmq.RabbitMQService;
import com.hpcloud.mon.ThresholdingConfiguration;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.AlarmStateTransitionEvent;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.AlarmDAO;
import com.hpcloud.mon.infrastructure.messaging.MessagingModule;
import com.hpcloud.mon.infrastructure.persistence.PersistenceModule;
import com.hpcloud.persistence.DatabaseConfiguration;
import com.hpcloud.streaming.storm.Logging;
import com.hpcloud.streaming.storm.Streams;
import com.hpcloud.util.Injector;
import com.hpcloud.util.Serialization;
@ -46,7 +47,7 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
private static final long serialVersionUID = -4126465124017857754L;
private transient Logger LOG;
private final DatabaseConfiguration dbConfig;
private final DataSourceFactory dbConfig;
private final RabbitMQConfiguration rabbitConfig;
private final Map<String, Alarm> alarms = new HashMap<String, Alarm>();
private String alertExchange;
@ -55,7 +56,7 @@ public class AlarmThresholdingBolt extends BaseRichBolt {
private transient RabbitMQService rabbitService;
private OutputCollector collector;
public AlarmThresholdingBolt(DatabaseConfiguration dbConfig, RabbitMQConfiguration rabbitConfig) {
public AlarmThresholdingBolt(DataSourceFactory dbConfig, RabbitMQConfiguration rabbitConfig) {
this.dbConfig = dbConfig;
this.rabbitConfig = rabbitConfig;
}

View File

@ -13,11 +13,10 @@ import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.CollectdMetrics;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.streaming.storm.Logging;
@ -85,8 +84,6 @@ public class EventProcessingBolt extends BaseRichBolt {
String eventType = event.getClass().getSimpleName();
for (Map.Entry<String, AlarmSubExpression> subExpressionEntry : event.alarmSubExpressions.entrySet()) {
MetricDefinition metricDef = subExpressionEntry.getValue().getMetricDefinition();
// TODO remove in the future
CollectdMetrics.removeUnsupportedDimensions(metricDef);
collector.emit(METRIC_SUB_ALARM_EVENT_STREAM_ID, new Values(eventType, metricDef,
new SubAlarm(subExpressionEntry.getKey(), event.alarmId, subExpressionEntry.getValue())));
}
@ -96,8 +93,6 @@ public class EventProcessingBolt extends BaseRichBolt {
String eventType = event.getClass().getSimpleName();
for (Map.Entry<String, MetricDefinition> entry : event.subAlarmMetricDefinitions.entrySet()) {
MetricDefinition metricDef = entry.getValue();
// TODO remove in the future
CollectdMetrics.removeUnsupportedDimensions(metricDef);
collector.emit(METRIC_ALARM_EVENT_STREAM_ID, new Values(eventType, metricDef, entry.getKey()));
}

View File

@ -1,11 +1,14 @@
package com.hpcloud.mon.infrastructure.thresholding;
import io.dropwizard.db.DataSourceFactory;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.fileupload.util.Streams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -18,18 +21,16 @@ import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.metric.Metric;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.model.SubAlarmStats;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.mon.domain.service.SubAlarmStatsRepository;
import com.hpcloud.mon.infrastructure.persistence.PersistenceModule;
import com.hpcloud.persistence.DatabaseConfiguration;
import com.hpcloud.streaming.storm.Logging;
import com.hpcloud.streaming.storm.Streams;
import com.hpcloud.streaming.storm.Tuples;
import com.hpcloud.util.Injector;
@ -58,7 +59,7 @@ public class MetricAggregationBolt extends BaseRichBolt {
final Map<MetricDefinition, SubAlarmStatsRepository> subAlarmStatsRepos = new HashMap<MetricDefinition, SubAlarmStatsRepository>();
private transient Logger LOG;
private DatabaseConfiguration dbConfig;
private DataSourceFactory dbConfig;
private transient SubAlarmDAO subAlarmDAO;
/** Namespaces for which metrics are received sporadically */
private Set<String> sporadicMetricNamespaces = Collections.emptySet();
@ -69,7 +70,7 @@ public class MetricAggregationBolt extends BaseRichBolt {
this.subAlarmDAO = subAlarmDAO;
}
public MetricAggregationBolt(DatabaseConfiguration dbConfig, Set<String> sporadicMetricNamespaces) {
public MetricAggregationBolt(DataSourceFactory dbConfig, Set<String> sporadicMetricNamespaces) {
this.dbConfig = dbConfig;
this.sporadicMetricNamespaces = sporadicMetricNamespaces;
}

View File

@ -1,8 +1,11 @@
package com.hpcloud.mon.infrastructure.thresholding;
import io.dropwizard.db.DataSourceFactory;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.fileupload.util.Streams;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -14,15 +17,13 @@ import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Values;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.service.MetricDefinitionDAO;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.mon.infrastructure.persistence.PersistenceModule;
import com.hpcloud.persistence.DatabaseConfiguration;
import com.hpcloud.streaming.storm.Logging;
import com.hpcloud.streaming.storm.Streams;
import com.hpcloud.util.Injector;
/**
@ -46,11 +47,11 @@ public class MetricFilteringBolt extends BaseRichBolt {
private static final Object SENTINAL = new Object();
private transient Logger LOG;
private final DatabaseConfiguration dbConfig;
private final DataSourceFactory dbConfig;
private transient MetricDefinitionDAO metricDefDAO;
private OutputCollector collector;
public MetricFilteringBolt(DatabaseConfiguration dbConfig) {
public MetricFilteringBolt(DataSourceFactory dbConfig) {
this.dbConfig = dbConfig;
}

View File

@ -1,46 +0,0 @@
package com.hpcloud.mon.infrastructure.thresholding.deserializer;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import backtype.storm.tuple.Fields;
import com.hpcloud.maas.common.model.metric.CollectdMetrics;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.streaming.storm.TupleDeserializer;
/**
* Deserializes collectd metrics.
*
* <ul>
* <li>Output: Metric metric
* </ul>
*
* @author Jonathan Halterman
*/
public class CollectdMetricDeserializer implements TupleDeserializer, Serializable {
private static final long serialVersionUID = -2340475568691974086L;
private static final Fields FIELDS = new Fields("metricDefinition", "metric");
@Override
public List<List<?>> deserialize(byte[] tuple) {
List<Metric> metrics = CollectdMetrics.toMetrics(tuple);
if (metrics == null)
return null;
List<List<?>> results = new ArrayList<List<?>>(metrics.size());
for (Metric metric : metrics) {
// TODO remove in the future
CollectdMetrics.removeUnsupportedDimensions(metric.definition);
results.add(Arrays.asList(metric.definition, metric));
}
return results;
}
@Override
public Fields getOutputFields() {
return FIELDS;
}
}

View File

@ -6,8 +6,8 @@ import java.util.List;
import backtype.storm.tuple.Fields;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.streaming.storm.TupleDeserializer;
import com.hpcloud.util.Serialization;

View File

@ -7,9 +7,7 @@ import java.util.List;
import backtype.storm.tuple.Fields;
import com.hpcloud.maas.common.model.metric.FlatMetric;
import com.hpcloud.maas.common.model.metric.FlatMetrics;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.mon.common.model.metric.Metric;
import com.hpcloud.streaming.storm.TupleDeserializer;
/**

View File

@ -20,13 +20,11 @@ import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import com.google.inject.AbstractModule;
import com.hpcloud.maas.common.model.alarm.AlarmExpression;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.messaging.rabbitmq.RabbitMQService;
import com.hpcloud.mon.ThresholdingConfiguration;
import com.hpcloud.mon.TopologyModule;
import com.hpcloud.mon.common.model.alarm.AlarmExpression;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.metric.Metric;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.AlarmDAO;

View File

@ -20,16 +20,14 @@ import backtype.storm.tuple.Values;
import com.google.common.collect.ImmutableMap;
import com.google.inject.AbstractModule;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.alarm.AlarmExpression;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.messaging.rabbitmq.RabbitMQService;
import com.hpcloud.mon.ThresholdingConfiguration;
import com.hpcloud.mon.TopologyModule;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.alarm.AlarmExpression;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.Metric;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.AlarmDAO;

View File

@ -9,10 +9,8 @@ import java.util.List;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.model.alarm.AlarmExpression;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.common.model.alarm.AlarmExpression;
import com.hpcloud.mon.common.model.alarm.AlarmState;
/**
* @author Jonathan Halterman

View File

@ -7,11 +7,9 @@ import static org.testng.Assert.assertTrue;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.util.time.TimeResolution;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.model.SubAlarmStats;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.util.time.TimeResolution;
/**
* @author Jonathan Halterman

View File

@ -13,13 +13,12 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.io.Resources;
import com.hpcloud.maas.common.model.alarm.AlarmExpression;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.alarm.AlarmExpression;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.domain.model.Alarm;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.AlarmDAO;
import com.hpcloud.mon.infrastructure.persistence.AlarmDAOImpl;
/**
* @author Jonathan Halterman

View File

@ -13,9 +13,8 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.service.MetricDefinitionDAO;
import com.hpcloud.mon.infrastructure.persistence.MetricDefinitionDAOImpl;
/**
* Note: MySQL dependent test.

View File

@ -16,12 +16,11 @@ import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.Resources;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.mon.infrastructure.persistence.SubAlarmDAOImpl;
/**
* @author Jonathan Halterman

View File

@ -25,20 +25,17 @@ import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.testing.MkTupleParam;
import com.hpcloud.maas.common.event.AlarmCreatedEvent;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.maas.common.model.alarm.AlarmState;
import com.hpcloud.maas.common.model.alarm.AlarmSubExpression;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.common.event.AlarmCreatedEvent;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.common.model.alarm.AlarmState;
import com.hpcloud.mon.common.model.alarm.AlarmSubExpression;
import com.hpcloud.mon.common.model.metric.Metric;
import com.hpcloud.mon.common.model.metric.MetricDefinition;
import com.hpcloud.mon.domain.model.SubAlarm;
import com.hpcloud.mon.domain.model.SubAlarmStats;
import com.hpcloud.mon.domain.service.SubAlarmDAO;
import com.hpcloud.mon.domain.service.SubAlarmStatsRepository;
import com.hpcloud.mon.infrastructure.thresholding.EventProcessingBolt;
import com.hpcloud.mon.infrastructure.thresholding.MetricAggregationBolt;
;
/**
* @author Jonathan Halterman
*/

View File

@ -1,44 +0,0 @@
package com.hpcloud.mon.infrastructure.thresholding.deserializer;
import static org.testng.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMap;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.maas.common.model.metric.MetricDefinition;
import com.hpcloud.mon.infrastructure.thresholding.deserializer.CollectdMetricDeserializer;
/**
* @author Jonathan Halterman
*/
@Test
public class CollectdMetricDeserializerTest {
private CollectdMetricDeserializer deserializer = new CollectdMetricDeserializer();
@SuppressWarnings("unchecked")
public void shouldDeserialize() {
String metric = "{\"putval\":{\"values\":[36184,51182963],\"dstypes\":[\"derive\",\"derive\"],\"dsnames\":[\"read\",\"write\"],\"time\":1365802618.809,\"interval\":60.000,\"host\":\"instance-000d65f3\",\"plugin\":\"libvirt\",\"plugin_instance\":\"\",\"type\":\"disk_ops\",\"type_instance\":\"vda\"}}";
List<List<?>> metrics = deserializer.deserialize(metric.getBytes());
Metric expected1 = new Metric(new MetricDefinition("hpcs.compute",
ImmutableMap.<String, String>builder()
.put("device", "vda")
.put("metric_name", "disk_read_ops_count")
.put("instance_id", "878067")
.build()), 1365802618, 36184);
Metric expected2 = new Metric(new MetricDefinition("hpcs.compute",
ImmutableMap.<String, String>builder()
.put("device", "vda")
.put("metric_name", "disk_write_ops_count")
.put("instance_id", "878067")
.build()), 1365802618, 51182963);
assertEquals(
metrics,
Arrays.asList(Arrays.asList(expected1.definition, expected1),
Arrays.asList(expected2.definition, expected2)));
}
}

View File

@ -7,8 +7,7 @@ import java.util.Collections;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.event.AlarmDeletedEvent;
import com.hpcloud.mon.infrastructure.thresholding.deserializer.MaasEventDeserializer;
import com.hpcloud.mon.common.event.AlarmDeletedEvent;
import com.hpcloud.util.Serialization;
/**

View File

@ -8,10 +8,7 @@ import java.util.List;
import org.testng.annotations.Test;
import com.hpcloud.maas.common.model.metric.FlatMetric;
import com.hpcloud.maas.common.model.metric.FlatMetrics;
import com.hpcloud.maas.common.model.metric.Metric;
import com.hpcloud.mon.infrastructure.thresholding.deserializer.MaasMetricDeserializer;
import com.hpcloud.mon.common.model.metric.Metric;
/**
* @author Jonathan Halterman