Skip to content

Commit

Permalink
Merge pull request #1048 from GRIDAPPSD/releases/2019.08.0
Browse files Browse the repository at this point in the history
Release of version 2019.08.0
  • Loading branch information
poorva1209 authored Aug 11, 2019
2 parents 658e1bf + ce53c33 commit c6facd4
Show file tree
Hide file tree
Showing 15 changed files with 338 additions and 272 deletions.
9 changes: 9 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ RUN cd ${TEMP_DIR} \
&& cp /gridappsd/services/gridappsd-sensor-simulator/sensor_simulator.config /gridappsd/services/ \
&& rm -rf /root/.cache/pip/wheels

# Get the gridappsd-sensor-simulator from the proper repository
RUN cd ${TEMP_DIR} \
&& git clone https://github.com/GRIDAPPSD/gridappsd-voltage-violation -b master \
&& cd gridappsd-voltage-violation \
&& mkdir -p /gridappsd/services/gridappsd-voltage-violation \
&& rm .git -rf \
&& cp * /gridappsd/services/gridappsd-voltage-violation \
&& cp /gridappsd/services/gridappsd-voltage-violation/voltage-violation.config /gridappsd/services/


# Copy initial applications and services into the container.
#
Expand Down
2 changes: 2 additions & 0 deletions gov.pnnl.goss.gridappsd/dictionary.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
battelle
sublicense
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@
public interface LogDataManager {

void store (String source, String processId, long timestamp,
String log_message, LogLevel log_level, ProcessStatus process_status, String username);
String log_message, LogLevel log_level, ProcessStatus process_status, String username, String process_type);

Serializable query(String source, String processId, long timestamp, LogLevel log_level, ProcessStatus process_status, String username);
Serializable query(String source, String processId, long timestamp, LogLevel log_level, ProcessStatus process_status, String username, String process_type);

Serializable query(String queryString);

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -116,19 +116,31 @@ public void start(){

@Override
public void store(String source, String processId, long timestamp,
String log_message, LogLevel log_level, ProcessStatus process_status, String username) {
String log_message, LogLevel log_level, ProcessStatus process_status, String username, String process_type) {

if(connection!=null){
try {

preparedStatement = connection.prepareStatement("INSERT INTO gridappsd.log VALUES (default, ?, ?, ?, ?, ?, ?,?)");
preparedStatement = connection.prepareStatement("INSERT INTO gridappsd.log ("
+ "id, "
+ "source, "
+ "process_id, "
+ "timestamp, "
+ "log_message, "
+ "log_level, "
+ "process_status, "
+ "username, "
+ "process_type) "
+ "VALUES (default, ?, ?, ?, ?, ?, ?,?,?)");
preparedStatement.setString(1, source);
preparedStatement.setString(2, processId);
preparedStatement.setTimestamp(3, new Timestamp(timestamp));
preparedStatement.setString(4, log_message);
preparedStatement.setString(5, log_level.toString());
preparedStatement.setString(6, process_status.toString());
preparedStatement.setString(7, username);
preparedStatement.setString(8, process_type);


preparedStatement.executeUpdate();

Expand Down Expand Up @@ -181,7 +193,7 @@ public void storeExpectedResults(String test_id, String processId, long simulati

@Override
public Serializable query(String source, String processId, long timestamp, LogLevel log_level, ProcessStatus process_status,
String username) {
String username, String process_type) {

if(connection==null){
try {
Expand Down Expand Up @@ -315,7 +327,7 @@ public Serializable handle(Serializable requestContent, String processId,
if(request.getQuery()!=null)
return this.query(request.getQuery());
else
return this.query(request.getSource(), request.getProcessId(), request.getTimestamp(), request.getLogLevel(),request.getProcessStatus(), request.getUsername());
return this.query(request.getSource(), request.getProcessId(), request.getTimestamp(), request.getLogLevel(),request.getProcessStatus(), request.getUsername(), request.getProcess_type());

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import gov.pnnl.goss.gridappsd.dto.LogMessage.ProcessStatus;
import gov.pnnl.goss.gridappsd.dto.RequestTimeseriesData;
import gov.pnnl.goss.gridappsd.dto.SimulationContext;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesResult;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesEntryResult;
import gov.pnnl.goss.gridappsd.utils.GridAppsDConstants;
import gov.pnnl.proven.api.producer.ProvenProducer;
import gov.pnnl.proven.api.producer.ProvenResponse;
Expand Down Expand Up @@ -121,8 +121,8 @@ public Serializable query(RequestTimeseriesData requestTimeseriesData) throws Ex
provenQueryProducer.restProducer(provenQueryUri, null, null);
provenQueryProducer.setMessageInfo("GridAPPSD", "QUERY", this.getClass().getSimpleName(), keywords);
ProvenResponse response = provenQueryProducer.sendMessage(requestTimeseriesData.toString(), requestId);
TimeSeriesResult result = TimeSeriesResult.parse(response.data.toString());
if(result.getMeasurements().get(0).getPoints().size()==0)
TimeSeriesEntryResult result = TimeSeriesEntryResult.parse(response.data.toString());
if(result.getData().size()==0)
return null;
String origFormat = "PROVEN_"+requestTimeseriesData.getQueryMeasurement().toString();
String responseFormat = requestTimeseriesData.getResponseFormat();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
package gov.pnnl.goss.gridappsd.data.conversion;

import gov.pnnl.goss.gridappsd.api.DataManager;
import gov.pnnl.goss.gridappsd.api.LogManager;
import gov.pnnl.goss.gridappsd.dto.LogMessage;
import gov.pnnl.goss.gridappsd.dto.LogMessage.LogLevel;
import gov.pnnl.goss.gridappsd.dto.LogMessage.ProcessStatus;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesEntryResult;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesKeyValuePair;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesMeasurementResult;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesResult;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesRowResult;
import gov.pnnl.goss.gridappsd.utils.GridAppsDConstants;

import java.io.InputStream;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.dm.annotation.api.Component;
import org.apache.felix.dm.annotation.api.ServiceDependency;
import org.apache.felix.dm.annotation.api.Start;

import gov.pnnl.goss.gridappsd.api.DataManager;
import gov.pnnl.goss.gridappsd.api.LogManager;
import gov.pnnl.goss.gridappsd.dto.LogMessage;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesResult;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesRowResult;
import gov.pnnl.goss.gridappsd.dto.LogMessage.LogLevel;
import gov.pnnl.goss.gridappsd.dto.LogMessage.ProcessStatus;
import gov.pnnl.goss.gridappsd.dto.TimeSeriesMeasurementResult;
import gov.pnnl.goss.gridappsd.utils.GridAppsDConstants;

@Component
public class ProvenWeatherToGridlabdWeatherConverter implements DataFormatConverter {
protected static SimpleDateFormat sdfIn = new SimpleDateFormat("MM/dd/yyyy HH:mm");
Expand Down Expand Up @@ -88,42 +88,41 @@ public void start(){
@Override
public void convert(String inputContent, PrintWriter outputContent) throws Exception {
boolean headerPrinted = false;
TimeSeriesResult resultObj = TimeSeriesResult.parse(inputContent);
for(TimeSeriesMeasurementResult record: resultObj.getMeasurements()){
TimeSeriesEntryResult resultObj = TimeSeriesEntryResult.parse(inputContent);
//for(TimeSeriesKeyValuePair record: resultObj.getEntryMap()){
if(!headerPrinted){
printGLDHeader(record, outputContent);
printGLDHeader(resultObj.getData().get(0), outputContent);
headerPrinted = true;
}
convertRecord(record, outputContent);
}
convertRecord(resultObj, outputContent);
//}
}

@Override
public void convert(InputStream inputContent, PrintWriter outputContent) throws Exception {
boolean headerPrinted = false;

String strContent = IOUtils.toString(inputContent);
TimeSeriesResult resultObj = TimeSeriesResult.parse(strContent);
for(TimeSeriesMeasurementResult record: resultObj.getMeasurements()){
TimeSeriesEntryResult resultObj = TimeSeriesEntryResult.parse(strContent);
//for(TimeSeriesMeasurementResult record: resultObj.getMeasurements()){
if(!headerPrinted){
printGLDHeader(record, outputContent);
printGLDHeader(resultObj.getData().get(0), outputContent);
headerPrinted = true;
}
convertRecord(record, outputContent);
}
convertRecord(resultObj, outputContent);
//}
}

protected void printGLDHeader(TimeSeriesMeasurementResult record, PrintWriter outputContent){
protected void printGLDHeader(HashMap<String,Object> map, PrintWriter outputContent){
//TODO this needs to come from data or tags within proven
String placeStr="", yearStr="", latlong = "";

try{
HashMap<String, String> map = record.getPoints().get(0).getRow().getEntryMap();
placeStr = map.get(PLACE);
placeStr = map.get(PLACE).toString();
placeStr = placeStr.replaceAll("\"", "");
latlong = map.get(LATITUDE)+","+map.get(LONGITUDE);

String dateStr = map.get(DATE);
String dateStr = map.get(DATE).toString();
String[] dateArr = StringUtils.split(dateStr,"/");
yearStr = dateArr[2];
}catch (Exception e) {
Expand All @@ -138,10 +137,10 @@ protected void printGLDHeader(TimeSeriesMeasurementResult record, PrintWriter ou
outputContent.println("temperature,humidity,wind_speed,solar_dir,solar_diff,solar_global");
}

protected void convertRecord(TimeSeriesMeasurementResult record, PrintWriter outputContent){
protected void convertRecord(TimeSeriesEntryResult record, PrintWriter outputContent){
//See https://github.com/gridlab-d/gridlab-d/blob/master/climate/climate.cpp for gridlabd format requirements
for(TimeSeriesRowResult result: record.getPoints()){
Map<String, String> map = result.getRow().getEntryMap();
for(HashMap<String,Object> map: record.getData()){
//Map<String, Object> map = record.getData();

//String dateStr = map.get(DATE);
//String timeStr = map.get(MST);
Expand All @@ -151,7 +150,8 @@ protected void convertRecord(TimeSeriesMeasurementResult record, PrintWriter out
Calendar c = Calendar.getInstance();
//For both the start and end time, set the year to the one that currently has data in the database
//TODO either we need more weather data in the database, or make this more flexible where we only have to search by month/day
c.setTime(new Date(Long.parseLong(map.get("time"))*1000));
long longTime = new Double(map.get(TIME).toString()).longValue();
c.setTime(new Date(longTime*1000));
c.set(Calendar.YEAR, 2013);
//Date datetime = sdfIn.parse(dateStr+" "+timeStr);
outputContent.print(sdfOut.format(c.getTime())+",");
Expand Down Expand Up @@ -196,10 +196,10 @@ protected void convertRecord(TimeSeriesMeasurementResult record, PrintWriter out
}
}

protected double readDouble(Map<String, String> map, String key, double minimumValue){
protected double readDouble(Map<String, Object> map, String key, double minimumValue){
double result = 0;
if(map.containsKey(key)){
String strVal = map.get(key);
String strVal = map.get(key).toString();
try {
double res = new Double(strVal);
if(res<minimumValue){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public enum ProcessStatus {
LogLevel logLevel;
ProcessStatus processStatus;
Boolean storeToDb = true;
String process_type;

public LogMessage(){}

Expand Down Expand Up @@ -120,6 +121,14 @@ public Boolean getStoreToDb() {
public void setStoreToDb(Boolean storeToDb) {
this.storeToDb = storeToDb;
}

public String getProcess_type() {
return process_type;
}

public void setProcess_type(String process_type) {
this.process_type = process_type;
}

public static LogMessage parse(String jsonString) throws JsonSyntaxException {
Gson gson = new Gson();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,31 +1,63 @@
package gov.pnnl.goss.gridappsd.dto;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.jena.ext.com.google.common.reflect.TypeToken;

import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;


public class TimeSeriesEntryResult {
List<TimeSeriesKeyValuePair> entry;
ArrayList<HashMap<String,Object>> data;

public List<TimeSeriesKeyValuePair> getEntry() {
if(entry==null){
entry = new ArrayList<TimeSeriesKeyValuePair>();
public ArrayList<HashMap<String,Object>> getData() {
if(data==null){
data = new ArrayList<HashMap<String,Object>>();
}
return entry;
return data;
}

public void setEntry(List<TimeSeriesKeyValuePair> entry) {
this.entry = entry;
public void setData(ArrayList<HashMap<String,Object>> data) {
this.data = data;
}


public HashMap<String, String> getEntryMap() {
HashMap<String, String> map = new HashMap<String, String>();
for(TimeSeriesKeyValuePair pair: getEntry()){
map.put(pair.getKey(), pair.getValue());
}
return map;
@Override
public String toString() {
Gson gson = new Gson();
return gson.toJson(this);
}

public static TimeSeriesEntryResult parse(String jsonString) {
Gson gson = new Gson();
TimeSeriesEntryResult obj = gson.fromJson(jsonString, TimeSeriesEntryResult.class);
if(obj.data==null)
throw new JsonSyntaxException("Expected attribute measurements not found");
return obj;
}

public static void main(String[] args){

Type listType = new TypeToken<ArrayList<HashMap<String, Object>>>(){}.getType();

String jsonString = "{\"data\":[{\"Diffuse\":19.958636,\"AvgWindSpeed\":7.9434,\"TowerRH\":31.61,\"long\":\"105.18 W\",\"MST\":\"13:44\",\"TowerDryBulbTemp\":74.534,\"DATE\":\"892013\",\"DirectCH1\":-0.0531206845,\"GlobalCM22\":20.2478337,\"AvgWindDirection\":359.3,\"time\":1376077440,\"place\":\"Solar Radiation Research Laboratory\",\"lat\":\"39.74 N\"}]}";
Gson gson = new Gson();
//jsonString = jsonString.substring(8, jsonString.length()-1);

System.out.println(jsonString);

//ArrayList<HashMap<String, Object>> obj = gson.fromJson(jsonString, listType);
TimeSeriesEntryResult obj = gson.fromJson(jsonString, TimeSeriesEntryResult.class);
System.out.println(obj);







}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package gov.pnnl.goss.gridappsd.dto;

import java.util.HashMap;

public class TimeSeriesKeyValuePair{
String key;
String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;

HashMap<String,Object> keyValuePair;

public HashMap<String, Object> getKeyValuePair() {
return keyValuePair;
}
public String getValue() {
return value;

public void setKeyValuePair(HashMap<String, Object> keyValuePair) {
this.keyValuePair = keyValuePair;
}
public void setValue(String value) {
this.value = value;

public Object getValue(String key){
return keyValuePair.get(key);
}

}
Loading

0 comments on commit c6facd4

Please sign in to comment.