Skip to content

Commit

Permalink
Changes for leakage detection
Browse files Browse the repository at this point in the history
  • Loading branch information
HariharanAnantharaman committed Apr 10, 2018
1 parent 34182fb commit 1ff5df8
Show file tree
Hide file tree
Showing 6 changed files with 1,177 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public void startProcess(int meterId, String startTime, String endTime, long sle
}
}

String query = "select last(value) from meterreadingvalues where time <='"+startTime+"' and meter_id='"+meterId+"'";// now() - 10d and meter_id = '124' group by time(1d) fill(0)
String query = "select last(value) from meterreadingvalues where time <'"+startTime+"' and meter_id='"+meterId+"'";// now() - 10d and meter_id = '124' group by time(1d) fill(0)
System.out.println("Query is:"+query);


Expand Down Expand Up @@ -103,7 +103,7 @@ public void startProcess(int meterId, String startTime, String endTime, long sle
try {
Telemetry telemetry=new Telemetry();
telemetry.setDate(startDate);
double flow=ThreadLocalRandom.current().nextDouble(200.25, 300.85);
double flow=ThreadLocalRandom.current().nextDouble(1.00, 2.00);
telemetry.setFlow(flow);
baseReadingValue=baseReadingValue+flow;
telemetry.setReading(baseReadingValue);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.techolution.mauritius.smartwater.supply.controller;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.techolution.mauritius.smartwater.supply.domain.ConsumptionLeakage;
import com.techolution.mauritius.smartwater.supply.domain.LeakageData;
import com.techolution.mauritius.smartwater.supply.service.SupplyAnalyticsService;

@CrossOrigin(origins = {"*"})
@RestController
@RequestMapping(value="/leakage")

public class LeakageDataController {

private Log log = LogFactory.getLog(LeakageDataController.class);

@Autowired
SupplyAnalyticsService analyticService;

@RequestMapping(method=RequestMethod.GET,value="/daily/metrics")
public @ResponseBody LeakageData getDailyLeakageStats()
{
log.info("Entering LeakageDataController.getDailyLeakageStats");
LeakageData resultdata=analyticService.getCurrentDayLeakageData();
log.info("Exiting LeakageDataController.getDailyLeakageStats");
return resultdata;
}
@RequestMapping(method=RequestMethod.GET,value="/daily/consumerleakage")
public @ResponseBody List<ConsumptionLeakage> getDailyConsumerLeakageStats()
{
log.info("Entering LeakageDataController.getDailyConsumerLeakageStats");
List<ConsumptionLeakage> resultList=analyticService.getCurrentDayConsumerLeakage();
log.info("Exiting LeakageDataController.getDailyConsumerLeakageStats");
return resultList;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.techolution.mauritius.smartwater.supply.domain;

import java.io.Serializable;
import java.util.Date;

public class ConsumptionLeakage implements Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;
private String meterId;
private Date date;
private double leakage;

public String getMeterId() {
return meterId;
}
public void setMeterId(String meterId) {
this.meterId = meterId;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getLeakage() {
return leakage;
}
public void setLeakage(double leakage) {
this.leakage = leakage;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.techolution.mauritius.smartwater.supply.domain;

import java.io.Serializable;
import java.util.Date;

public class LeakageData implements Serializable {

private Date metricsDate;

private double consumptionLeakage;

private double networkLeakage;

public Date getMetricsDate() {
return metricsDate;
}

public void setMetricsDate(Date metricsDate) {
this.metricsDate = metricsDate;
}

public double getConsumptionLeakage() {
return consumptionLeakage;
}

public void setConsumptionLeakage(double consumptionLeakage) {
this.consumptionLeakage = consumptionLeakage;
}

public double getNetworkLeakage() {
return networkLeakage;
}

public void setNetworkLeakage(double networkLeakage) {
this.networkLeakage = networkLeakage;
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.techolution.mauritius.smartwater.supply.service;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
Expand All @@ -20,6 +22,8 @@
import org.springframework.stereotype.Component;

import com.techolution.mauritius.smartwater.supply.InfluxProperties;
import com.techolution.mauritius.smartwater.supply.domain.ConsumptionLeakage;
import com.techolution.mauritius.smartwater.supply.domain.LeakageData;
import com.techolution.mauritius.smartwater.supply.domain.MeterConnection;
import com.techolution.mauritius.smartwater.supply.domain.MeterTrendData;
import com.techolution.mauritius.smartwater.supply.domain.WaterSupplyDailyConnectionStats;
Expand Down Expand Up @@ -52,6 +56,8 @@ public class SupplyAnalyticsService {
private static String DOWN="DOWN";
private static String DEFAULT_LOCATION="TEST";

private static String SERIES_NAME_CONSUMERLEAKAGE="consumerleakage";
private static String SERIES_NAME_NETWORKLEAKAGE="networkleakage";



Expand Down Expand Up @@ -290,7 +296,7 @@ public Map <Long, MeterConnection> getAllConnections(){

public WaterSupplyDailyConnectionStats getStats(){

log.info("Entering SupplyDataService.getStats");
log.info("Entering SupplyAnalyticsService.getStats");

WaterSupplyDailyConnectionStats connectionStats=new WaterSupplyDailyConnectionStats();
getConnectionsMap();
Expand Down Expand Up @@ -396,8 +402,125 @@ public WaterSupplyDailyConnectionStats getStats(){


influxDB.close();
log.info("Exiting SupplyDataService.getStats");
log.info("Exiting SupplyAnalyticsService.getStats");
return connectionStats;
}

public LeakageData getCurrentDayLeakageData(){

log.info("Entering SupplyAnalyticsService.getStats");

SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

Calendar start=Calendar.getInstance(TimeZone.getTimeZone(influxProperties.getDatatimezone()));
String startTime=myFormat.format(start.getTime());

start.add(Calendar.DATE,1);
String endTime=myFormat.format(start.getTime());

String leakageval="select sum(value) from networkleakage,consumerleakage where time >='"+startTime+"' and time <'"+endTime+"' ";


InfluxDB influxDB = InfluxDBFactory.connect(influxProperties.getUrl(),influxProperties.getUsername(),influxProperties.getPassword());
long startStarttime=System.currentTimeMillis();
QueryResult queryResult = influxDB.query(new Query(leakageval, influxProperties.getDbname()));
long endtime=System.currentTimeMillis();
log.debug("Time After countOfSupply query execution:"+endtime);
log.debug("Time Taken for query execution:"+(endtime-startStarttime));

LeakageData leakageData=new LeakageData();
// leakageData.setMetricsDate((Calendar.getInstance(influxProperties.getDatatimezone())));

List<Result> results=queryResult.getResults();
if(results!=null && results.size()>0){
Result result=results.get(0);
List<Series> serieslist=result.getSeries();
serieslist.forEach(series -> {
String seriesName= series.getName();
List<List<Object>> values=series.getValues();
if(values !=null && values.size()>0){
List<Object> value=values.get(0);
if(SERIES_NAME_CONSUMERLEAKAGE.equalsIgnoreCase(seriesName)){
leakageData.setConsumptionLeakage((Double)value.get(1));
String time=(String)value.get(0);
Instant instant=Instant.parse(time);

leakageData.setMetricsDate(Date.from(instant));
}else{
leakageData.setNetworkLeakage((Double)value.get(1));
String time=(String)value.get(0);
Instant instant=Instant.parse(time);

leakageData.setMetricsDate(Date.from(instant));
}
}

});
}


log.info("Exiting SupplyAnalyticsService.getStats");
return leakageData;

}


public List<ConsumptionLeakage> getCurrentDayConsumerLeakage(){

log.info("Entering SupplyAnalyticsService.getCurrentDayConsumerLeakage");

SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");

Calendar start=Calendar.getInstance(TimeZone.getTimeZone(influxProperties.getDatatimezone()));
String startTime=myFormat.format(start.getTime());

start.add(Calendar.DATE,1);
String endTime=myFormat.format(start.getTime());

String leakageval="select sum(value) from consumerleakage where time >='"+startTime+"' and time <'"+endTime+"' group by meter_id ";


InfluxDB influxDB = InfluxDBFactory.connect(influxProperties.getUrl(),influxProperties.getUsername(),influxProperties.getPassword());
long startStarttime=System.currentTimeMillis();
QueryResult queryResult = influxDB.query(new Query(leakageval, influxProperties.getDbname()));
long endtime=System.currentTimeMillis();
log.debug("Time After countOfSupply query execution:"+endtime);
log.debug("Time Taken for query execution:"+(endtime-startStarttime));


List<ConsumptionLeakage> resultList=new ArrayList<ConsumptionLeakage>();

// leakageData.setMetricsDate((Calendar.getInstance(influxProperties.getDatatimezone())));

List<Result> results=queryResult.getResults();
if(results!=null && results.size()>0){
Result result=results.get(0);
List<Series> serieslist=result.getSeries();
serieslist.forEach(series -> {
ConsumptionLeakage leakage= new ConsumptionLeakage();

String meterId=series.getTags().get(METER_ID);
leakage.setMeterId(meterId);
List<List<Object>> values=series.getValues();
if(values !=null && values.size()>0){
List<Object> value=values.get(0);
leakage.setLeakage( (Double)value.get(1));

String time=(String)value.get(0);
Instant instant=Instant.parse(time);
leakage.setDate(Date.from(instant));


}
resultList.add(leakage);

});
}


log.info("Exiting SupplyAnalyticsService.getCurrentDayConsumerLeakage");
return resultList;

}

}
Loading

0 comments on commit 1ff5df8

Please sign in to comment.