Alters measurement function to use more efficient data structure

This commit is contained in:
Patrick McDonagh
2017-04-17 11:12:38 -05:00
parent c58aacc502
commit 9c84de53c4
5 changed files with 122 additions and 87 deletions

View File

@@ -11,71 +11,6 @@ def json_lastcard(request):
return get_latest_card(request)
@view_config(route_name="json_valuesbetween", renderer="prettyjson")
@view_config(route_name="json_valuesbetween_wparams", renderer="prettyjson")
def json_valuesbetween(request):
end = datetime.now()
try: # Attempt to get a value from the request.
end = request.matchdict['enddt']
end = end.replace("T", " ")
end = datetime.strptime(end, "%Y-%m-%d %H:%M:%S.%fZ")
except KeyError:
pass
start = end - timedelta(days=2)
try: # Attempt to get a value from the request.
start = request.matchdict['startdt']
start = start.replace("T", " ")
start = datetime.strptime(start, "%Y-%m-%d %H:%M:%S.%fZ")
except KeyError:
pass
tag_data = []
grouped_tags = request.db['wellData'].aggregate([
{
'$match': {"timestamp": {"$gt": start, "$lte": end}}
},
{
'$sort': {"tagname": 1, "timestamp": 1}
},
{
'$group': {
'_id': "$tagname",
'timestamps': {'$push': "$timestamp"},
'currentValues': {'$push': "$currentValue"}
}
}
])
for t in grouped_tags:
tag_data.append({"tagname": t['_id'], "timestamps": list(map(lambda a: a.strftime("%Y-%m-%d %H:%M:%S.%fZ"), t['timestamps'])), "currentValues": t['currentValues']})
return {'values': tag_data, 'start': start, 'end': end}
@view_config(route_name="json_valuesdaterange", renderer="prettyjson")
def json_valuesdaterange(request):
date_limits = list(request.db['wellData'].aggregate([
{"$group": {
"_id": 'null',
"last": {"$max": "$timestamp"},
"first": {"$min": "$timestamp"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_singlevaluedaterange", renderer="prettyjson")
def json_singlevaluedaterange(request):
date_limits = list(request.db['wellData'].aggregate([
{"$match": {"tagname": request.matchdict['tagname']}},
{"$group": {
"_id": 'null',
"last": {"$max": "$timestamp"},
"first": {"$min": "$timestamp"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_runstatusnow", renderer="prettyjson")
def json_runstatusnow(request):

View File

@@ -140,6 +140,30 @@ def get_grouped_measurements_between(request, start_datetime, end_datetime, tagn
@view_config(route_name='values_all', renderer="templates/valuesall.jinja2")
def values_page(request):
latest_tag_values = []
latesttag_agg = request.db['measurements'].aggregate([
{'$sort': {'dateStored': 1}},
{
'$group': {
'_id': '$tagname',
'currentValue': {'$last': '$currentValue'},
'units': {'$last': '$units'},
'maxValue': {'$last': '$maxValue'},
'minValue': {'$last': '$minValue'},
'totalValue': {'$last': '$totalValue'},
'averageValue': {'$last': '$averageValue'},
'useTotal': {'$last': '$useTotal'},
'useAverage': {'$last': '$useAverage'}
}
}
])
for t in latesttag_agg:
latest_tag_values.append(t)
return {'navgroup': 'values', "current_values": latest_tag_values}
@view_config(route_name='json_values_all', renderer='prettyjson')
def values_all(request):
end = datetime.now(tz=pytz.utc)
@@ -158,8 +182,28 @@ def values_all(request):
except KeyError:
pass
latest_tag_values = []
latesttag_agg = request.db['measurements'].aggregate([
{'$sort': {'dateStored': 1}},
{
'$group': {
'_id': '$tagname',
'currentValue': {'$last': '$currentValue'},
'units': {'$last': '$units'},
'maxValue': {'$last': '$maxValue'},
'minValue': {'$last': '$minValue'},
'totalValue': {'$last': '$totalValue'},
'averageValue': {'$last': '$averageValue'},
'useTotal': {'$last': '$useTotal'},
'useAverage': {'$last': '$useAverage'}
}
}
])
for t in latesttag_agg:
latest_tag_values.append(t)
all_values = get_grouped_measurements_between(request, start, end)
return {'navgroup': 'values', 'current_tag_values': all_values}
return {'navgroup': 'values', 'values': all_values, "current_values": latest_tag_values}
@view_config(route_name="json_singlevaluebetween", renderer="prettyjson")
@@ -183,3 +227,51 @@ def json_singlevaluebetween(request):
all_values = get_grouped_measurements_between(request, start, end, tagname=request.matchdict['tagname'])
return {'tag': all_values, 'start': start, 'end': end, 'tagname': request.matchdict['tagname']}
@view_config(route_name="json_valuesbetween", renderer="prettyjson")
@view_config(route_name="json_valuesbetween_wparams", renderer="prettyjson")
def json_valuesbetween(request):
end = datetime.now(tz=pytz.utc)
try: # Attempt to get a value from the request.
end = request.matchdict['enddt']
end = end.replace("T", " ")
end = pytz.utc.localize(datetime.strptime(end, "%Y-%m-%d %H:%M:%S.%fZ"))
except KeyError:
pass
start = end - timedelta(days=2)
try: # Attempt to get a value from the request.
start = request.matchdict['startdt']
start = start.replace("T", " ")
start = pytz.utc.localize(datetime.strptime(start, "%Y-%m-%d %H:%M:%S.%fZ"))
except KeyError:
pass
tag_data = get_grouped_measurements_between(request, start, end)
return {'values': tag_data, 'start': start, 'end': end}
@view_config(route_name="json_valuesdaterange", renderer="prettyjson")
def json_valuesdaterange(request):
date_limits = list(request.db['measurements'].aggregate([
{"$group": {
"_id": 'null',
"last": {"$max": "$dateStored"},
"first": {"$min": "$dateStored"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}
@view_config(route_name="json_singlevaluedaterange", renderer="prettyjson")
def json_singlevaluedaterange(request):
date_limits = list(request.db['measurements'].aggregate([
{"$match": {"tagname": request.matchdict['tagname']}},
{"$group": {
"_id": 'null',
"last": {"$max": "$dateStored"},
"first": {"$min": "$dateStored"}
}}
]))[0]
return {'first_date': date_limits['first'], 'last_date': date_limits['last']}

View File

@@ -86,23 +86,30 @@ function drawChart(data){
var graph_data = [] ;
var json_data = data.values;
var ctx = document.getElementById("valueChart");
for (var i = 0; i < json_data.length; i++){
var color_index = 0;
for (x in data.values){
var tagdata = data.values[x];
var newObj = {
label: json_data[i].tagname,
label: x,
fill: false,
data: [],
lineTension: 0.05,
borderColor: color_scale[i % color_scale.length],
borderColor: color_scale[color_index % color_scale.length],
pointRadius: 2
}
for(var j = 0; j < json_data[i].timestamps.length; j++){
};
for (var j = 0; j < tagdata.values.length; j++){
newObj.data.push({
x: json_data[i].timestamps[j],
y: json_data[i].currentValues[j]
x: tagdata.values[j].timestamp,
y: tagdata.values[j].tagvalue
});
}
graph_data.push(newObj);
color_index++;
}
scatterChart = new Chart(ctx, {
type: 'line',
responsive: true,
@@ -133,7 +140,6 @@ function drawSingleGraph(data){
var tag = data.tag[data.tagname];
console.log(tag);
console.log(tag.values.length);
var graph_data = [];
var ctx = document.getElementById("myChart");
@@ -149,7 +155,7 @@ function drawSingleGraph(data){
}
for (var i = 0; i < tag.values.length; i++){
currentValues.data.push({x: tag.values.timestamp, y: tag.values.tagvalue});
currentValues.data.push({x: tag.values[i].timestamp, y: tag.values[i].tagvalue});
}
graph_data.push(currentValues)
@@ -165,7 +171,7 @@ function drawSingleGraph(data){
}
for (var i = 0; i < tag.maxes.length; i++){
maxValues.data.push({x: tag.maxes.timestamp, y: tag.maxes.maxValue});
maxValues.data.push({x: tag.maxes[i].timestamp, y: tag.maxes[i].maxValue});
}
graph_data.push(maxValues)
@@ -181,7 +187,7 @@ function drawSingleGraph(data){
}
for (var i = 0; i < tag.mins.length; i++){
minValues.data.push({x: tag.mins.timestamp, y: tag.mins.maxValue});
minValues.data.push({x: tag.mins[i].timestamp, y: tag.mins[i].maxValue});
}
graph_data.push(minValues)
@@ -197,7 +203,7 @@ function drawSingleGraph(data){
}
for (var i = 0; i < tag.averages.length; i++){
averageValues.data.push({x: tag.averages.timestamp, y: tag.averages.maxValue});
averageValues.data.push({x: tag.averages[i].timestamp, y: tag.averages[i].maxValue});
}
graph_data.push(averageValues)
@@ -213,12 +219,14 @@ function drawSingleGraph(data){
}
for (var i = 0; i < tag.totals.length; i++){
totalValues.data.push({x: tag.totals.timestamp, y: tag.totals.maxValue});
totalValues.data.push({x: tag.totals[i].timestamp, y: tag.totals[i].maxValue});
}
graph_data.push(totalValues)
color_index++;
console.log(graph_data);
scatterChart = new Chart(ctx, {
type: 'line',
data: {

View File

@@ -47,6 +47,8 @@ $.ajax({
success: drawSingleSlider
});
console.log("/json/values/tag/" + tagName + "/between/" + start + "/" + end);
$.ajax({
dataType: 'json',
url: "/json/values/tag/" + tagName + "/between/" + start + "/" + end,

View File

@@ -15,19 +15,17 @@
<th>Min</th>
<th>Average</th>
<th>Total</th>
<th>Last Stored</th>
</tr>
</thead>
<tbody>
{% for t in current_tag_values %}
{% for t in current_values %}
<tr>
<td><a href="/values/tag/{{t._id}}">{{t._id}}</a></td>
<td>{{t.value | round(3)}}</td>
<td>{{t.max | round(3)}}</td>
<td>{{t.min | round(3)}}</td>
<td>{{t.average | round(3)}}</td>
<td>{{t.total | round(3)}}</td>
<td>{{t.timestamp | datetime('medium')}}</td>
<td>{{t.currentValue | round(3)}} {{t.units}}</td>
<td>{{t.maxValue | round(3)}} {{t.units}}</td>
<td>{{t.minValue | round(3)}} {{t.units}}</td>
<td>{% if t.useAverage %}{{t.averageValue | round(3)}} {{t.units}}{% endif %}</td>
<td>{% if t.useTotal %}{{t.totalValue | round(3)}} {{t.units}}{% endif %}</td>
</tr>
{% endfor %}
</tbody>