From 1f6a75283b9db48193b16065406202d0a4823b4d Mon Sep 17 00:00:00 2001 From: Joerg Steffens Date: Fri, 18 Sep 2015 15:41:57 +0200 Subject: [PATCH] volume: add status file --- bareos/fuse/node/base.py | 7 +++++++ bareos/fuse/node/job.py | 10 ++-------- bareos/fuse/node/volume.py | 6 ++++-- bareos/fuse/node/volumestatus.py | 29 +++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 bareos/fuse/node/volumestatus.py diff --git a/bareos/fuse/node/base.py b/bareos/fuse/node/base.py index c0cdd12a2b3..558b204953e 100644 --- a/bareos/fuse/node/base.py +++ b/bareos/fuse/node/base.py @@ -2,6 +2,7 @@ """ from datetime import datetime, timedelta +from dateutil import parser as DateParser import errno import fuse import grp @@ -120,3 +121,9 @@ def update(self): def do_update(self): # dummy, to be filled by inherented classes pass + + def _convert_date_bareos_unix(self, bareosdate): + unixtimestamp = int(DateParser.parse(bareosdate).strftime("%s")) + self.logger.debug( "unix timestamp: %d" % (unixtimestamp)) + return unixtimestamp + diff --git a/bareos/fuse/node/job.py b/bareos/fuse/node/job.py index 22dc13e8f52..f534fe3aa7c 100644 --- a/bareos/fuse/node/job.py +++ b/bareos/fuse/node/job.py @@ -6,7 +6,6 @@ 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 @@ -17,11 +16,11 @@ 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']) + 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']) + self.stat.st_mtime = self._convert_date_bareos_unix(self.job['realendtime']) except KeyError: pass @@ -33,11 +32,6 @@ def get_name(self): 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)) diff --git a/bareos/fuse/node/volume.py b/bareos/fuse/node/volume.py index a28231f72cf..259308955e4 100644 --- a/bareos/fuse/node/volume.py +++ b/bareos/fuse/node/volume.py @@ -5,6 +5,7 @@ from bareos.fuse.node.file import File from bareos.fuse.node.directory import Directory from bareos.fuse.node.jobslist import JobsList +from bareos.fuse.node.volumestatus import VolumeStatus from pprint import pformat class Volume(Directory): @@ -13,5 +14,6 @@ def __init__(self, bsock, volume): self.volume = volume def do_update(self): - self.add_subnode(File(self.bsock, name="info.txt", content = pformat(self.volume) + "\n")) - self.add_subnode(JobsList(self.bsock, name="jobs", selector = "volume=%s" % (self.name))) + self.add_subnode(File(self.bsock, name="info.txt", content=pformat(self.volume) + "\n")) + self.add_subnode(JobsList(self.bsock, name="jobs", selector="volume=%s" % (self.name))) + self.add_subnode(VolumeStatus(self.bsock, name="volume", volume=self.volume)) diff --git a/bareos/fuse/node/volumestatus.py b/bareos/fuse/node/volumestatus.py new file mode 100644 index 00000000000..156f3dbb340 --- /dev/null +++ b/bareos/fuse/node/volumestatus.py @@ -0,0 +1,29 @@ +""" +Bareos specific Fuse node. +""" + +from bareos.fuse.node.file import File + +class VolumeStatus(File): + def __init__(self, bsock, name, volume): + super(VolumeStatus, self).__init__(bsock, name, None) + self.volume = volume + self.update_stat() + + def do_update(self): + volumename = self.volume['volumename'] + data = self.bsock.call( "llist volume=%s" % (volumename) ) + self.volume = data['volume'] + self.update_stat() + + def update_stat(self): + try: + self.stat.st_size = int(self.volume['volbytes']) + self.stat.st_atime = self._convert_date_bareos_unix(self.volume['labeldate']) + #self.stat.st_ctime = stat['ctime'] + self.stat.st_mtime = self._convert_date_bareos_unix(self.volume['lastwritten']) + # TODO: set mode dependend on if volume is in apppend mode or full + #self.stat.st_mode = stat['mode'] + except KeyError as e: + self.logger.warning(str(e)) + pass