/*
* Copyright (c) 2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.model;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import com.emc.storageos.db.client.TimeSeriesMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* CF definition for statistics time series data
*/
@Cf("Stats")
@CompactionOptimized
@Shards(10)
@BucketGranularity(TimeSeriesMetadata.TimeBucket.HOUR)
@Ttl(60 * 60 * 24 * 7 /* 7 days */)
public class StatTimeSeries implements TimeSeries<Stat> {
private static final Logger _logger = LoggerFactory
.getLogger(StatTimeSeries.class);
private StatSerializer _serializer = new StatSerializer();
@Override
public StatSerializer getSerializer() {
return _serializer;
}
/**
* Stat serializer implementation ;Default Serialization is not efficient (version problems),
* but till we finalize Serializer Implementation, this code remains.
* For demo purpose, will use Default Serialization
* To-Do: use Protocol Buffers
*/
public static class StatSerializer implements TimeSeriesSerializer<Stat> {
@Override
public byte[] serialize(Stat data) {
byte[] Objbytes = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = null;
try {
out = new ObjectOutputStream(bos);
out.writeObject(data);
Objbytes = bos.toByteArray();
} catch (Exception e) {
_logger.error("Serializing Object to byte Array Exception :" + e);
} finally {
try {
out.close();
bos.close();
} catch (IOException e) {
_logger.error("Error while closing Streams " + e);
}
}
return Objbytes;
}
@Override
public Stat deserialize(byte[] data) {
Object statsObj = null;
ByteArrayInputStream bis = null;
ObjectInput in = null;
try {
bis = new ByteArrayInputStream(data);
in = new ObjectInputStream(bis);
statsObj = in.readObject();
} catch (Exception e1) {
_logger.error("DeSerializing Object to byte Array Exception :" + e1);
} finally {
try {
in.close();
bis.close();
} catch (IOException e1) {
_logger.error("Error while closing Streams " + e1);
}
}
return (Stat) statsObj;
}
}
}