Skip to content
Snippets Groups Projects
Commit 9907eadb authored by anttil's avatar anttil
Browse files

SSDM-2885: simple query client

SVN: 35376
parent 70651f79
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,8 @@ import json
import sys
from datetime import datetime
import time
import collections
import copy
entity_id = sys.argv[1]
......@@ -21,19 +23,74 @@ def report(time, entity):
print "%s: %s" % (key, value)
epoch = datetime.utcfromtimestamp(0)
def timestamptonumber(s):
return time.mktime(datetime.strptime(s,"%Y-%m-%d %H:%M:%S.%f").timetuple())
return (datetime.strptime(s,"%Y-%m-%d %H:%M:%S.%f") - epoch).total_seconds() * 1000.0
current_timestamp = content[entity_id][0]['time']
entity = dict()
data = dict()
for entry in content[entity_id]:
if abs(timestamptonumber(entry['time']) - timestamptonumber(current_timestamp)) > 2:
report(current_timestamp, entity)
current_timestamp = entry['time']
key = entry['key']
value = entry['value']
validfrom = entry['validFrom']
validuntil = None
if 'validUntil' in entry:
validuntil = entry['validUntil']
if validfrom in data:
data[validfrom].append([validfrom, key, value, "begin"])
else:
data[validfrom] = [[validfrom, key, value, "begin"]]
entity[entry['key']] = entry['value']
if validuntil is not None:
if validuntil in data:
data[validuntil].append([validfrom, key, value, "end"])
else:
data[validuntil] = [[validfrom, key, value, "end"]]
sorted_data = collections.OrderedDict(sorted(data.items(), key=lambda t: timestamptonumber(t[0])))
history = []
currenttime = next(iter(sorted_data))
currententity = dict()
for timestamp, events in sorted_data.iteritems():
if currenttime != timestamp:
element = copy.deepcopy(currententity)
element['time'] = currenttime
currenttime = timestamp
history.append(element)
for event in filter(lambda event: event[3] == "end", events):
key = event[1]
value = event[2]
currententity[key].remove(value)
if len(currententity[key]) == 0:
del currententity[key]
for event in filter(lambda event: event[3] == "begin", events):
key = event[1]
value = event[2]
if key not in currententity:
currententity[key] = set([value])
else:
currententity[key].add(value)
if currententity != history[-1]:
currententity['time'] = currenttime
history.append(currententity)
for state in history:
print "-- %s --" % state['time']
for key, value in collections.OrderedDict(reversed(list(state.items()))).iteritems():
if key != 'time':
for element in value:
print "%s: %s" % (key, element)
print "\n"
report(current_timestamp, entity)
print "\n"
#!/bin/bash
psql -dopenbis_dev -A -t -c \
"SELECT content FROM events WHERE identifiers LIKE '$1, %' OR identifiers LIKE '%, $1' OR identifiers LIKE '%, $1,%' OR identifiers = '$1'" |
python formatter.py $1
\ No newline at end of file
usage() {
echo "Usage: $0 <database name> <entity perm id>"
exit 1
}
check_arguments() {
if [ $# -ne 2 ]; then
usage
fi
}
check_arguments $@
DB_NAME=$1
PERM_ID=$2
echo "SELECT content FROM events WHERE identifiers LIKE '$PERM_ID, %' OR identifiers LIKE '%, $PERM_ID' OR identifiers LIKE '%, $PERM_ID,%' OR identifiers = '$PERM_ID'"
psql -d $DB_NAME -A -t -c \
"SELECT content FROM events WHERE identifiers LIKE '$PERM_ID, %' OR identifiers LIKE '%, $PERM_ID' OR identifiers LIKE '%, $PERM_ID,%' OR identifiers = '$PERM_ID'" |
python formatter.py $PERM_ID
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment