annotate service/reasoning/inference.py @ 795:c8562ace4917

big updates for k8s, py3, drop FuXi, use prometheus for metrics.
author drewp@bigasterisk.com
date Sun, 27 Dec 2020 03:29:18 -0800
parents f3f667769aef
children 6b80a6c58907
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
1 """
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
2 see ./reasoning for usage
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
3 """
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
4
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
5 import contextlib
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
6 import os
756
f3f667769aef python 3! and some types and cleanups
drewp@bigasterisk.com
parents: 288
diff changeset
7
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
8 from prometheus_client import Summary
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
9 from rdflib import Graph, Namespace
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
10 from rdflib.graph import ConjunctiveGraph
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
11 from rdflib.parser import StringInputSource
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
12
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
13 from escapeoutputstatements import escapeOutputStatements
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
14
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
15 READ_RULES_CALLS = Summary('read_rules_calls', 'calls')
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
16
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
17 ROOM = Namespace("http://projects.bigasterisk.com/room/")
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
18 LOG = Namespace('http://www.w3.org/2000/10/swap/log#')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
19
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
20
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
21 def _loadAndEscape(ruleStore: ConjunctiveGraph, n3: bytes, outputPatterns):
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
22 ruleStore.parse(StringInputSource(n3), format='n3')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
23 return
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
24 ruleGraph = Graph(ruleStore)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
25
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
26 # Can't escapeOutputStatements in the ruleStore since it
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
27 # doesn't support removals. Can't copy plainGraph into
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
28 # ruleGraph since something went wrong with traversing the
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
29 # triples inside quoted graphs, and I lose all the bodies
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
30 # of my rules. This serialize/parse version is very slow (400ms),
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
31 # but it only runs when the file changes.
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
32 plainGraph = Graph()
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
33 plainGraph.parse(StringInputSource(n3.encode('utf8')), format='n3') # for inference
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
34 escapeOutputStatements(plainGraph, outputPatterns=outputPatterns)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
35 expandedN3 = plainGraph.serialize(format='n3')
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
36
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
37 ruleGraph.parse(StringInputSource(expandedN3), format='n3')
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
38
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
39
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
40 _rulesCache = (None, None, None, None)
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
41
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
42
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
43 def readRules(rulesPath, outputPatterns):
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
44 """
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
45 returns (rulesN3, ruleStore)
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
46
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
47 This includes escaping certain statements in the output
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
48 (implied) subgraaphs so they're not confused with input
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
49 statements.
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
50 """
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
51 global _rulesCache
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
52
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
53 with READ_RULES_CALLS.time():
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
54 mtime = os.path.getmtime(rulesPath)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
55 key = (rulesPath, mtime)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
56 if _rulesCache[:2] == key:
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
57 _, _, rulesN3, ruleStore = _rulesCache
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
58 else:
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
59 rulesN3 = open(rulesPath, 'rb').read() # for web display
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
60
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
61 ruleStore = ConjunctiveGraph()
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
62 _loadAndEscape(ruleStore, rulesN3, outputPatterns)
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
63 log.debug('%s rules' % len(ruleStore))
756
f3f667769aef python 3! and some types and cleanups
drewp@bigasterisk.com
parents: 288
diff changeset
64
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
65 _rulesCache = key + (rulesN3, ruleStore)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
66 return rulesN3, ruleStore
284
95f72a22965d rules become simple-looking again; fix the ambiguity in memory after loading them.
drewp@bigasterisk.com
parents: 281
diff changeset
67
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
68
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
69 def infer(graph: ConjunctiveGraph, rules: ConjunctiveGraph):
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
70 """
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
71 returns new graph of inferred statements.
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
72 """
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
73 log.info(f'Begin inference of graph len={len(graph)} with rules len={len(rules)}:')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
74
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
75 workingSet = ConjunctiveGraph()
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
76 workingSet.addN(graph.quads())
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
77
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
78 implied = ConjunctiveGraph()
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
79
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
80 delta = 1
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
81 while delta > 0:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
82 delta = -len(implied)
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
83
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
84 for r in rules:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
85 if r[1] == LOG['implies']:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
86 containsSetup = all(st in workingSet for st in r[0])
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
87 if containsSetup:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
88 log.info(f' Rule {r[0]} -> present={containsSetup}')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
89 for st in r[0]:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
90 log.info(f' {st[0].n3()} {st[1].n3()} {st[2].n3()}')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
91
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
92 log.info(f' ...implies {len(r[2])} statements')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
93 if containsSetup:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
94 for st in r[2]:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
95 workingSet.add(st)
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
96 implied.add(st)
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
97 else:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
98 log.info(f' {r}')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
99 delta += len(implied)
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
100 log.info(f' this inference round added {delta} more implied stmts')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
101 log.info(f'{len(implied)} stmts implied:')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
102 for st in implied:
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
103 log.info(f' {st}')
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
104 return implied
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
105
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
106 # based on fuxi/tools/rdfpipe.py
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
107 target = Graph()
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
108 tokenSet = generateTokenSet(graph)
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
109 with _dontChangeRulesStore(rules):
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
110 network = ReteNetwork(rules, inferredTarget=target)
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
111 network.feedFactsToAdd(tokenSet)
756
f3f667769aef python 3! and some types and cleanups
drewp@bigasterisk.com
parents: 288
diff changeset
112
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
113 return target
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
114
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
115
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
116 @contextlib.contextmanager
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
117 def _dontChangeRulesStore(rules):
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
118 if not hasattr(rules, '_stashOriginalRules'):
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
119 rules._stashOriginalRules = rules.rules[:]
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
120 yield
756
f3f667769aef python 3! and some types and cleanups
drewp@bigasterisk.com
parents: 288
diff changeset
121 for k in list(rules.formulae.keys()):
287
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
122 if not k.startswith('_:Formula'):
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
123 del rules.formulae[k]
3b61c0dfaaef switch from evtiming to greplin.scales. Optimize rules reader to reuse previous data (400ms -> 0.6ms)
drewp@bigasterisk.com
parents: 284
diff changeset
124 rules.rules = rules._stashOriginalRules[:]
756
f3f667769aef python 3! and some types and cleanups
drewp@bigasterisk.com
parents: 288
diff changeset
125
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
126
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
127 import logging
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
128 import time
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
129
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
130 log = logging.getLogger()
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
131
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
132
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
133 def logTime(func):
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
134
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
135 def inner(*args, **kw):
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
136 t1 = time.time()
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
137 try:
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
138 ret = func(*args, **kw)
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
139 finally:
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
140 log.info("Call to %s took %.1f ms" % (func.__name__, 1000 * (time.time() - t1)))
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
141 return ret
795
c8562ace4917 big updates for k8s, py3, drop FuXi, use prometheus for metrics.
drewp@bigasterisk.com
parents: 756
diff changeset
142
20
3f0dd03112b5 move reasoning from /my/proj/room, new integration with magma
drewp@bigasterisk.com
parents:
diff changeset
143 return inner