diff options
author | Joerg Steffens <joerg.steffens@dass-it.de> | 2015-09-16 17:58:10 +0300 |
---|---|---|
committer | Joerg Steffens <joerg.steffens@dass-it.de> | 2015-09-16 17:58:10 +0300 |
commit | d21ed245f17a8625128ecbed1187d7a909d3a742 (patch) | |
tree | 9921e70a3201b0957a5bb0d99ae98375f9b4954c | |
parent | f019e6d98f9b604d359e472fc45c5dbcf012e38a (diff) |
seperated nodes in individual files
-rw-r--r-- | bareos/fuse/node/__init__.py | 14 | ||||
-rw-r--r-- | bareos/fuse/node/backups.py | 17 | ||||
-rw-r--r-- | bareos/fuse/node/bareosnodes.py | 169 | ||||
-rw-r--r-- | bareos/fuse/node/bvfsdir.py | 62 | ||||
-rw-r--r-- | bareos/fuse/node/bvfsfile.py | 34 | ||||
-rw-r--r-- | bareos/fuse/node/client.py | 13 | ||||
-rw-r--r-- | bareos/fuse/node/clients.py | 17 | ||||
-rw-r--r-- | bareos/fuse/node/directory.py | 2 | ||||
-rw-r--r-- | bareos/fuse/node/file.py | 2 | ||||
-rw-r--r-- | bareos/fuse/node/job.py | 44 | ||||
-rw-r--r-- | bareos/fuse/node/joblog.py | 19 | ||||
-rw-r--r-- | bareos/fuse/node/jobs.py | 16 | ||||
-rw-r--r-- | bareos/fuse/node/volume.py | 15 | ||||
-rw-r--r-- | bareos/fuse/node/volumes.py | 17 | ||||
-rw-r--r-- | bareos/fuse/root.py | 2 |
15 files changed, 266 insertions, 177 deletions
diff --git a/bareos/fuse/node/__init__.py b/bareos/fuse/node/__init__.py index 08588b9..6662aaf 100644 --- a/bareos/fuse/node/__init__.py +++ b/bareos/fuse/node/__init__.py @@ -1,5 +1,9 @@ -#__all__ = [ "bconsole" ] -from bareos.fuse.node.base import Base -from bareos.fuse.node.file import File -from bareos.fuse.node.directory import Directory -from bareos.fuse.node.bareosnodes import * +files = ['backups', 'base', 'bvfs', 'client', 'clients', 'directory', 'file', 'job', 'joblog', 'jobs', 'volume', 'volumes'] + +for i in files: + module = __import__( "bareos.fuse.node." + i, globals(), locals(), ['*']) + for k in dir(module): + locals()[k] = getattr(module, k) + del k +del i +del files diff --git a/bareos/fuse/node/backups.py b/bareos/fuse/node/backups.py new file mode 100644 index 0000000..5d3f95a --- /dev/null +++ b/bareos/fuse/node/backups.py @@ -0,0 +1,17 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.directory import Directory +from bareos.fuse.node.job import Job + +class Backups(Directory): + def __init__(self, bsock, name, client): + super(Backups, self).__init__(bsock, name) + self.client = client + + def do_update(self): + data = self.bsock.call("llist backups client=%s" % (self.client)) + backups = data['backups'] + for i in backups: + self.add_subnode(Job(self.bsock, i)) diff --git a/bareos/fuse/node/bareosnodes.py b/bareos/fuse/node/bareosnodes.py deleted file mode 100644 index d181772..0000000 --- a/bareos/fuse/node/bareosnodes.py +++ /dev/null @@ -1,169 +0,0 @@ -""" -Bareos specific Fuse nodes. -""" - -from bareos.fuse.node import Base -from bareos.fuse.node import File -from bareos.fuse.node import Directory -from dateutil import parser as DateParser -import errno -import logging -from pprint import pformat -import stat - -class Jobs(Directory): - def __init__(self, bsock, name): - super(Jobs, self).__init__(bsock, name) - - def do_update(self): - data = self.bsock.call("llist jobs") - jobs = data['jobs'] - for i in jobs: - self.add_subnode(Job(self.bsock, i)) - -class Job(Directory): - def __init__(self, bsock, job): - self.job = job - super(Job, self).__init__(bsock, self.get_name()) - try: - self.stat.st_ctime = self.convert_date_bareos_unix(self.job['starttime']) - except KeyError: - pass - try: - self.stat.st_mtime = self.convert_date_bareos_unix(self.job['realendtime']) - except KeyError: - pass - - def get_name(self): - # TODO: adapt list backups to include name - try: - name = "jobid={jobid}_client={clientname}_name={name}_level={level}_status={jobstatus}".format(**self.job) - except KeyError: - name = "jobid={jobid}_level={level}_status={jobstatus}".format(**self.job) - return name - - def convert_date_bareos_unix(self, bareosdate): - unixtimestamp = int(DateParser.parse(bareosdate).strftime("%s")) - self.logger.debug( "unix timestamp: %d" % (unixtimestamp)) - return unixtimestamp - - def do_update(self): - self.add_subnode(File(self.bsock, name="info.txt", content = pformat(self.job) + "\n")) - self.add_subnode(JobLog(self.bsock, self.job)) - self.add_subnode(BvfsDir(self.bsock, "data", self.job['jobid'], None)) - -class JobLog(File): - def __init__(self, bsock, job): - super(JobLog, self).__init__(bsock, "joblog.txt") - self.job = job - # TODO: static when job is finished - - def do_update(self): - jobid = self.job['jobid'] - data = self.bsock.call( "llist joblog jobid=%s" % (jobid) ) - self.content = "" - for i in data['joblog']: - self.content += str(i['time']) + " " - self.content += str(i['logtext']) + "\n" - - -class Volumes(Directory): - def __init__(self, bsock, name): - super(Volumes, self).__init__(bsock, name) - - def do_update(self): - data = self.bsock.call("llist volumes all") - volumes = data['volumes'] - for i in volumes: - volume = i['volumename'] - self.add_subnode(Volume(self.bsock, i)) - -class Volume(Directory): - def __init__(self, bsock, volume): - super(Volume, self).__init__(bsock, volume['volumename']) - self.volume = volume - - def do_update(self): - self.add_subnode(File(self.bsock, name="info.txt", content = pformat(self.volume) + "\n")) - -class Clients(Directory): - def __init__(self, bsock, name): - super(Clients, self).__init__(bsock, name) - - def do_update(self): - data = self.bsock.call(".clients") - clients = data['clients'] - for i in clients: - name = i['name'] - self.add_subnode(Client(self.bsock, name)) - -class Client(Directory): - def __init__(self, bsock, name): - super(Client, self).__init__(bsock, name) - - def do_update(self): - self.add_subnode(Backups(self.bsock, "backups", client=self.get_name())) - -class Backups(Directory): - def __init__(self, bsock, name, client): - super(Backups, self).__init__(bsock, name) - self.client = client - - def do_update(self): - data = self.bsock.call("llist backups client=%s" % (self.client)) - backups = data['backups'] - for i in backups: - self.add_subnode(Job(self.bsock, i)) - -class BvfsDir(Directory): - def __init__(self, bsock, directory, jobid, pathid): - super(BvfsDir, self).__init__(bsock, directory) - self.jobid = jobid - self.pathid = pathid - self.static = True - - def do_update(self): - if self.pathid == None: - self.bsock.call(".bvfs_update jobid=%s" % (self.jobid)) - path = "path=/" - else: - path = "pathid=%s" % self.pathid - data = self.bsock.call(".bvfs_lsdirs jobid=%s %s" % (self.jobid, path)) - directories = data['directories'] - data = self.bsock.call(".bvfs_lsfiles jobid=%s %s" % (self.jobid, path)) - files = data['files'] - for i in directories: - if i['name'] != "." and i['name'] != "..": - directory = i['name'].rstrip('/') - pathid = i['pathid'] - self.add_subnode(BvfsDir(self.bsock, directory, self.jobid, pathid)) - for i in files: - self.add_subnode(BvfsFile(self.bsock, i)) - -class BvfsFile(File): - def __init__(self, bsock, file): - super(BvfsFile, self).__init__(bsock, file['name'], content = None) - self.file = file - self.static = True - self.do_update() - - def do_update(self): - self.stat.st_mode = self.file['stat']['mode'] - self.stat.st_size = self.file['stat']['size'] - self.stat.st_atime = self.file['stat']['atime'] - self.stat.st_ctime = self.file['stat']['ctime'] - self.stat.st_mtime = self.file['stat']['mtime'] - - #"stat": { - #"atime": 1441134679, - #"ino": 3689524, - #"dev": 2051, - #"mode": 33256, - #"nlink": 1, - #"user": "joergs", - #"group": "joergs", - #"ctime": 1441134679, - #"rdev": 0, - #"size": 1613, - #"mtime": 1441134679 - #}, diff --git a/bareos/fuse/node/bvfsdir.py b/bareos/fuse/node/bvfsdir.py new file mode 100644 index 0000000..b0f7c7e --- /dev/null +++ b/bareos/fuse/node/bvfsdir.py @@ -0,0 +1,62 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.exceptions import * +from bareos.fuse.node.bvfsfile import BvfsFile +from bareos.fuse.node.directory import Directory +from dateutil import parser as DateParser +import errno +import logging + +class BvfsDir(Directory): + def __init__(self, bsock, directory, jobid, pathid): + super(BvfsDir, self).__init__(bsock, directory) + self.jobid = jobid + self.pathid = pathid + self.static = True + + def do_update(self): + directories = self.get_directories(self.pathid) + files = self.get_files(self.pathid) + for i in directories: + if i['name'] != "." and i['name'] != "..": + if i['name'] != "/": + directory = i['name'].rstrip('/') + else: + directory = "data" + pathid = i['pathid'] + self.add_subnode(BvfsDir(self.bsock, directory, self.jobid, pathid)) + for i in files: + self.add_subnode(BvfsFile(self.bsock, i)) + + def get_directories(self, pathid): + if pathid == None: + self.bsock.call(".bvfs_update jobid=%s" % (self.jobid)) + path = 'path=""' + else: + path = 'pathid=%s' % pathid + data = self.bsock.call('.bvfs_lsdirs jobid=%s %s' % (self.jobid, path)) + directories = data['directories'] + if pathid == None: + found = False + for i in directories: + if i['name'] != "." and i['name'] != "..": + if i['name'] == "/": + self.pathid = i['pathid'] + else: + found = True + if not found: + # skip empty root directory + if not self.pathid: + # no pathid and no directoies found. This should not happen + return [] + return self.get_directories(self.pathid) + return directories + + def get_files(self, pathid): + if pathid: + data = self.bsock.call(".bvfs_lsfiles jobid=%s pathid=%s" % (self.jobid, pathid)) + return data['files'] + else: + return [] diff --git a/bareos/fuse/node/bvfsfile.py b/bareos/fuse/node/bvfsfile.py new file mode 100644 index 0000000..e7da2c1 --- /dev/null +++ b/bareos/fuse/node/bvfsfile.py @@ -0,0 +1,34 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.file import File +import stat + +class BvfsFile(File): + def __init__(self, bsock, file): + super(BvfsFile, self).__init__(bsock, file['name'], content = None) + self.file = file + self.static = True + self.do_update() + + def do_update(self): + self.stat.st_mode = self.file['stat']['mode'] + self.stat.st_size = self.file['stat']['size'] + self.stat.st_atime = self.file['stat']['atime'] + self.stat.st_ctime = self.file['stat']['ctime'] + self.stat.st_mtime = self.file['stat']['mtime'] + + #"stat": { + #"atime": 1441134679, + #"ino": 3689524, + #"dev": 2051, + #"mode": 33256, + #"nlink": 1, + #"user": "joergs", + #"group": "joergs", + #"ctime": 1441134679, + #"rdev": 0, + #"size": 1613, + #"mtime": 1441134679 + #}, diff --git a/bareos/fuse/node/client.py b/bareos/fuse/node/client.py new file mode 100644 index 0000000..6122c1b --- /dev/null +++ b/bareos/fuse/node/client.py @@ -0,0 +1,13 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.backups import Backups +from bareos.fuse.node.directory import Directory + +class Client(Directory): + def __init__(self, bsock, name): + super(Client, self).__init__(bsock, name) + + def do_update(self): + self.add_subnode(Backups(self.bsock, "backups", client=self.get_name())) diff --git a/bareos/fuse/node/clients.py b/bareos/fuse/node/clients.py new file mode 100644 index 0000000..7361a46 --- /dev/null +++ b/bareos/fuse/node/clients.py @@ -0,0 +1,17 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.client import Client +from bareos.fuse.node.directory import Directory + +class Clients(Directory): + def __init__(self, bsock, name): + super(Clients, self).__init__(bsock, name) + + def do_update(self): + data = self.bsock.call(".clients") + clients = data['clients'] + for i in clients: + name = i['name'] + self.add_subnode(Client(self.bsock, name)) diff --git a/bareos/fuse/node/directory.py b/bareos/fuse/node/directory.py index bcd5bb8..90fb3da 100644 --- a/bareos/fuse/node/directory.py +++ b/bareos/fuse/node/directory.py @@ -1,7 +1,7 @@ """ """ -from bareos.fuse.node import Base +from bareos.fuse.node.base import Base import errno import logging from pprint import pformat diff --git a/bareos/fuse/node/file.py b/bareos/fuse/node/file.py index adb36f7..8d31a61 100644 --- a/bareos/fuse/node/file.py +++ b/bareos/fuse/node/file.py @@ -1,7 +1,7 @@ """ """ -from bareos.fuse.node import Base +from bareos.fuse.node.base import Base import errno import fuse import logging diff --git a/bareos/fuse/node/job.py b/bareos/fuse/node/job.py new file mode 100644 index 0000000..76fa51b --- /dev/null +++ b/bareos/fuse/node/job.py @@ -0,0 +1,44 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.bvfsdir import BvfsDir +from bareos.fuse.node.directory import Directory +from bareos.fuse.node.file import File +from bareos.fuse.node.joblog import JobLog +from dateutil import parser as DateParser +import errno +import logging +from pprint import pformat +import stat + +class Job(Directory): + def __init__(self, bsock, job): + self.job = job + super(Job, self).__init__(bsock, self.get_name()) + try: + self.stat.st_ctime = self.convert_date_bareos_unix(self.job['starttime']) + except KeyError: + pass + try: + self.stat.st_mtime = self.convert_date_bareos_unix(self.job['realendtime']) + except KeyError: + pass + + def get_name(self): + # TODO: adapt list backups to include name + try: + name = "jobid={jobid}_client={clientname}_name={name}_level={level}_status={jobstatus}".format(**self.job) + except KeyError: + name = "jobid={jobid}_level={level}_status={jobstatus}".format(**self.job) + return name + + def convert_date_bareos_unix(self, bareosdate): + unixtimestamp = int(DateParser.parse(bareosdate).strftime("%s")) + self.logger.debug( "unix timestamp: %d" % (unixtimestamp)) + return unixtimestamp + + def do_update(self): + self.add_subnode(File(self.bsock, name="info.txt", content = pformat(self.job) + "\n")) + self.add_subnode(JobLog(self.bsock, self.job)) + self.add_subnode(BvfsDir(self.bsock, "data", self.job['jobid'], None)) diff --git a/bareos/fuse/node/joblog.py b/bareos/fuse/node/joblog.py new file mode 100644 index 0000000..e220311 --- /dev/null +++ b/bareos/fuse/node/joblog.py @@ -0,0 +1,19 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.file import File + +class JobLog(File): + def __init__(self, bsock, job): + super(JobLog, self).__init__(bsock, "joblog.txt") + self.job = job + # TODO: static when job is finished + + def do_update(self): + jobid = self.job['jobid'] + data = self.bsock.call( "llist joblog jobid=%s" % (jobid) ) + self.content = "" + for i in data['joblog']: + self.content += str(i['time']) + " " + self.content += str(i['logtext']) + "\n" diff --git a/bareos/fuse/node/jobs.py b/bareos/fuse/node/jobs.py new file mode 100644 index 0000000..d611c0b --- /dev/null +++ b/bareos/fuse/node/jobs.py @@ -0,0 +1,16 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.directory import Directory +from bareos.fuse.node.job import Job + +class Jobs(Directory): + def __init__(self, bsock, name): + super(Jobs, self).__init__(bsock, name) + + def do_update(self): + data = self.bsock.call("llist jobs") + jobs = data['jobs'] + for i in jobs: + self.add_subnode(Job(self.bsock, i)) diff --git a/bareos/fuse/node/volume.py b/bareos/fuse/node/volume.py new file mode 100644 index 0000000..ef01959 --- /dev/null +++ b/bareos/fuse/node/volume.py @@ -0,0 +1,15 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.file import File +from bareos.fuse.node.directory import Directory +from pprint import pformat + +class Volume(Directory): + def __init__(self, bsock, volume): + super(Volume, self).__init__(bsock, volume['volumename']) + self.volume = volume + + def do_update(self): + self.add_subnode(File(self.bsock, name="info.txt", content = pformat(self.volume) + "\n")) diff --git a/bareos/fuse/node/volumes.py b/bareos/fuse/node/volumes.py new file mode 100644 index 0000000..69dc07e --- /dev/null +++ b/bareos/fuse/node/volumes.py @@ -0,0 +1,17 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.directory import Directory +from bareos.fuse.node.volume import Volume + +class Volumes(Directory): + def __init__(self, bsock, name): + super(Volumes, self).__init__(bsock, name) + + def do_update(self): + data = self.bsock.call("llist volumes all") + volumes = data['volumes'] + for i in volumes: + volume = i['volumename'] + self.add_subnode(Volume(self.bsock, i)) diff --git a/bareos/fuse/root.py b/bareos/fuse/root.py index 62c1b2c..11a217b 100644 --- a/bareos/fuse/root.py +++ b/bareos/fuse/root.py @@ -1,6 +1,7 @@ """ """ +from bareos.fuse.node.directory import Directory from bareos.fuse.node import * class Root(Directory): @@ -12,4 +13,3 @@ class Root(Directory): self.add_subnode(Jobs(bsock, "jobs")) self.add_subnode(Volumes(bsock, "volumes")) self.add_subnode(Clients(bsock, "clients")) - |