async def save_container_logs(client, container, since, sparql, base_concept): logs = await client.logs(container, stream=True, timestamps=True, since=since) async for line in logs: timestamp, log = line.decode().split(" ", 1) uuid = uuid1(0) concept = "%s/log/%s" % (base_concept, uuid) logger.debug("Log into %s: %s", concept, log.strip()) resp = await sparql.update( """ WITH <%(graph)s> INSERT DATA { <%(base_concept)s> swarmui:logLine <%(concept)s> . <%(concept)s> mu:uuid %(uuid)s ; dct:issued %(timestamp)s^^xsd:dateTime ; dct:title %(log)s . } """ % { "graph": graph, "base_concept": base_concept, "concept": concept, "uuid": escape_string(str(uuid)), "timestamp": escape_string(timestamp), "log": escape_string(log), }) logger.info("Finished logging into %s (container %s is stopped)", base_concept, container[:12])
async def create_container_log_concept(sparql, container): concept = "docklogs:%s" % container['Id'] resp = await sparql.query(""" ASK FROM <%(graph)s> WHERE { <%(concept)s> ?p ?o . } """ % { "graph": graph, "concept": concept, }) if not resp['boolean']: resp = await sparql.update( """ WITH <%(graph)s> INSERT DATA { <%(concept)s> dct:title %(name)s . } """ % { "graph": graph, "concept": concept, "name": escape_string(container['Name'][1:]), }) logger.info("Created logging concept: %s", concept) return concept
async def create_container_log_concept(sparql, container): """ Create a container log concept, this is the node that will group all the log lines together """ concept = IRI("docklogs:%s" % container['Id']) resp = await sparql.query("ASK FROM {{graph}} WHERE { {{}} ?p ?o }", concept) if not resp['boolean']: resp = await sparql.update( "WITH {{graph}} INSERT DATA { {{}} dct:title {{}} }", concept, escape_string(container['Name'][1:])) logger.info("Created logging concept: %s", concept) return concept
def _test_escape_string(self, string, expected): result = escape_string(string) self.assertEqual(result, expected)