/*
* Copyright 2012 Nodeable Inc
*
* 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.
*/
package com.streamreduce.core.transformer.message;
import static org.junit.Assert.assertTrue;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import com.streamreduce.core.event.EventId;
import com.streamreduce.core.model.Event;
import com.streamreduce.util.JSONUtils;
import com.streamreduce.util.MessageUtils;
import com.streamreduce.util.Pair;
import net.sf.json.JSONObject;
import org.bson.types.ObjectId;
import org.junit.Test;
public class NodebellyMessageTransformerTest {
private static JSONObject metricConfig = null;
private static String METRIC_CONFIG_JSON;
@Test
public void testReadAndParseConfigFile() throws Exception {
METRIC_CONFIG_JSON = JSONUtils.readJSONFromClasspath("/metricConfig.json");
assertTrue(METRIC_CONFIG_JSON.charAt(0) == '{');
metricConfig = JSONObject.fromObject(METRIC_CONFIG_JSON);
assertTrue( metricConfig != null );
}
@Test
public void testMessageTransFormationSummary() throws Exception {
testMessageTransFormationOf("NODEBELLY_SUMMARY", 33.4f);
}
@Test
public void testMessageTransFormationStatus() throws Exception {
testMessageTransFormationOf("NODEBELLY_STATUS", 33.4f);
}
@Test
public void testMessageTransFormationAnomaly() throws Exception {
testMessageTransFormationOf("NODEBELLY_ANOMALY", 13.4f);
testMessageTransFormationOf("NODEBELLY_ANOMALY", 23.4f);
testMessageTransFormationOf("NODEBELLY_ANOMALY", 183.4f);
}
@Test
public void testGetUnits() throws Exception {
Map<String, String> metricCriteria = new HashMap<>();
metricCriteria.put("RESOURCE_ID", "DiskReadBytes");
metricCriteria.put("METRIC_ID", "average");
NodebellyMessageTransformer transformer = setupTransformer();
Pair pair = transformer.getUnitsLabel("INVENTORY_ITEM_RESOURCE_USAGE", metricCriteria, 1065.0, true);
//System.out.println(pair.first + " " + pair.second);
assert(((String)pair.second).startsWith(" "));
assert(((String)pair.second).endsWith("Kb"));
pair = transformer.getUnitsLabel("INVENTORY_ITEM_RESOURCE_USAGE", metricCriteria, 234234235.0, false);
//System.out.println(pair.first + " " + pair.second);
assert(!((String)pair.second).startsWith(" "));
assert(((String)pair.second).endsWith("Mb"));
}
private void testMessageTransFormationOf(String mtype, float fvalue) throws Exception {
ArrayList<Map<String, Object>> items = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
Map<String, Object> criteria = new HashMap<>();
for(int i = 0; i < 3; i++) {
Map<String, Object> row = new HashMap<>();
row.put("name", "INVENTORY_ITEM_RESOURCE_USAGE");
criteria.put("RESOURCE_ID", "CPUUtilization");
criteria.put("METRIC_ID", "average");
row.put("metricCriteria", criteria);
row.put("targetConnectionAlias", "ConnectFoo"+i); // ie, Nodeable Cloud
row.put("targetAlias", "ItemFoo"+i); // ie, i-a35034c7
row.put("value", new Float(4+i));
row.put("mean", new Float(43+i));
row.put("stddev", new Float(0.2f+i));
row.put("diff", new Float(1.0));
row.put("min", new Float(-3.0));
row.put("max", new Float(8.0));
items.add(row);
}
map.put("items", items);
map.put("account", "4e532e7bb5a8bb09c315a158");
map.put("timestamp", (new Date()).getTime() );
map.put("targetProviderId", "4e532e7bb5a8bb09c315a158");
map.put("name", "INVENTORY_ITEM_RESOURCE_USAGE");
map.put("metricCriteria", criteria);
map.put("diff", new Float(8.4));
map.put("mean", new Float(7.4));
map.put("stddev", new Float(6.4));
map.put("total", new Float(13.4));
map.put("value", new Float(fvalue));
map.put("granularity", new Long(120000));
map.put("targetId", new ObjectId("4fa95fc43554603703e727c3"));
map.put("type", mtype);
map.put("targetConnectionAlias", "ParentConnectionName");
map.put("targetAlias", "ParentInventoryName");
Event event = new Event();
event.setEventId(EventId.valueOf((String) map.get("type")));
event.setTargetId((ObjectId) map.get("targetId"));
event.setMetadata(map);
NodebellyMessageTransformer transformer = setupTransformer();
String output = transformer.doTransform(event);
assertTrue(output != null);
//System.out.println(output);
}
private NodebellyMessageTransformer setupTransformer() throws Exception {
Properties messageProperties = new Properties();
InputStream in = NodebellyMessageTransformerTest.class.getResourceAsStream("/messages.properties");
messageProperties.load(in);
in.close();
JSONObject metricConfig = JSONObject.fromObject(MessageUtils.readJSONFromClasspath("/metricConfig.json"));
return new NodebellyMessageTransformer(messageProperties, null, metricConfig);
}
}