package com.intuit.tank.common; /* * #%L * Intuit Tank Agent (apiharness) * %% * Copyright (C) 2011 - 2015 Intuit Inc. * %% * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * #L% */ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Random; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; import com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi; import com.intuit.tank.persistence.databases.DatabaseKeys; import com.intuit.tank.reporting.api.TPSInfo; import com.intuit.tank.reporting.api.TPSInfoContainer; import com.intuit.tank.reporting.databases.Attribute; import com.intuit.tank.reporting.databases.IDatabase; import com.intuit.tank.test.TestGroups; import com.intuit.tank.vm.common.util.ReportUtil; public class TPSTest { private static final Logger LOG = LogManager.getLogger(TPSTest.class); private AmazonDynamoDBClient dbclient; @BeforeSuite(groups = TestGroups.EXPERIMENTAL) public void init() { ClientConfiguration clientConfig = new ClientConfiguration(); AWSCredentials credentials = new BasicAWSCredentials(System.getProperty("AWS_KEY_ID"), System.getProperty("AWS_KEY")); dbclient = new AmazonDynamoDBClient(credentials, clientConfig); } @Test(groups = TestGroups.EXPERIMENTAL) private void sendTps() { TPSInfoContainer tpsInfo = createTPsInfo(); try { IDatabase db = new AmazonDynamoDatabaseDocApi(dbclient); List<com.intuit.tank.reporting.databases.Item> items = new ArrayList<com.intuit.tank.reporting.databases.Item>(); for (TPSInfo info : tpsInfo.getTpsInfos()) { com.intuit.tank.reporting.databases.Item item = createItem(info); items.add(item); } String tpsTableName = "test_qa"; db.createTable(tpsTableName); LOG.info("Sending " + items.size() + " to TPS Table " + tpsTableName); db.addItems(tpsTableName, items, false); } catch (Exception e) { LOG.error("Error storing TPS: " + e, e); } } private TPSInfoContainer createTPsInfo() { Random rand = new Random(); List<TPSInfo> infoList = new ArrayList<TPSInfo>(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.HOUR, -234); cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MINUTE, 0); Date min = cal.getTime(); for (int i = 0; i < 100; i++) { Date start = cal.getTime(); cal.add(Calendar.SECOND, 15); String key = "Apache v1 page 1::12::the other one"; TPSInfo info = new TPSInfo(start, key, rand.nextInt(49) + 1, 15); infoList.add(info); } Date max = cal.getTime(); return new TPSInfoContainer(min, max, 15, infoList); } private com.intuit.tank.reporting.databases.Item createItem(TPSInfo info) { com.intuit.tank.reporting.databases.Item item = new com.intuit.tank.reporting.databases.Item(); List<Attribute> attributes = new ArrayList<Attribute>(); String ts = ReportUtil.getTimestamp(info.getTimestamp()); addAttribute(attributes, DatabaseKeys.TIMESTAMP_KEY.getShortKey(), ts); addAttribute(attributes, DatabaseKeys.JOB_ID_KEY.getShortKey(), "1234"); addAttribute(attributes, DatabaseKeys.INSTANCE_ID_KEY.getShortKey(), "i-1234443322"); addAttribute(attributes, DatabaseKeys.LOGGING_KEY_KEY.getShortKey(), info.getKey()); addAttribute(attributes, DatabaseKeys.PERIOD_KEY.getShortKey(), Integer.toString(info.getPeriodInSeconds())); addAttribute(attributes, DatabaseKeys.TRANSACTIONS_KEY.getShortKey(), Integer.toString(info.getTransactions())); item.setAttributes(attributes); String name = "i-1234443322" + "_" + "1234" + "_" + info.getKey() + "_" + ts; item.setName(name); return item; } public static void addAttribute(List<Attribute> attributes, String key, String value) { if (value == null) { value = ""; } attributes.add(new Attribute(key, value)); } }