import arvados
import itertools
+import json
import queue
import threading
class CollectionReader(object):
- def __init__(self, collection_id):
+ def __init__(self, collection_id, api_client=None, collection_object=None):
self._collection_id = collection_id
self._label = collection_id
self._readers = []
+ self._api_client = api_client
+ self._collection = collection_object or arvados.collection.CollectionReader(self._collection_id, api_client=self._api_client)
def __str__(self):
return self._label
def __iter__(self):
logger.debug('load collection %s', self._collection_id)
- collection = arvados.collection.CollectionReader(self._collection_id)
- filenames = [filename for filename in collection]
+
+ filenames = [filename for filename in self._collection]
# Crunch2 has multiple stats files
if len(filenames) > 1:
filenames = ['crunchstat.txt', 'arv-mount.txt']
for filename in filenames:
try:
- self._readers.append(collection.open(filename))
+ self._readers.append(self._collection.open(filename, "rt"))
except IOError:
logger.warn('Unable to open %s', filename)
self._label = "{}/{}".format(self._collection_id, filenames[0])
reader.close()
self._readers = []
+ def node_info(self):
+ try:
+ with self._collection.open("node.json", "rt") as f:
+ return json.load(f)
+ except IOError:
+ logger.warn('Unable to open node.json')
+ return {}
+
class LiveLogReader(object):
EOF = None
['event_type', 'in', self.event_types]]
try:
while True:
- page = arvados.api().logs().index(
+ page = arvados.api().logs().list(
limit=1000,
order=['id asc'],
filters=filters + [['id','>',str(last_id)]],
def __exit__(self, exc_type, exc_val, exc_tb):
pass
+
+ def node_info(self):
+ return {}
+
+class StubReader(object):
+ def __init__(self, fh):
+ self.fh = fh
+
+ def __str__(self):
+ return ""
+
+ def __iter__(self):
+ return iter(self.fh)
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ pass
+
+ def node_info(self):
+ return {}