]> git.sur5r.net Git - bacula/bacula/blob - bacula/examples/python/DirStartUp.py
This commit was manufactured by cvs2svn to create tag
[bacula/bacula] / bacula / examples / python / DirStartUp.py
1 #
2 # Bacula Python interface script for the Director
3 #
4
5 # You must import both sys and bacula
6 import sys, bacula
7
8 # This is the list of Bacula daemon events that you
9 #  can receive.
10 class BaculaEvents(object):
11   def __init__(self):
12      # Called here when a new Bacula Events class is
13      #  is created. Normally not used 
14      noop = 1
15
16   def JobStart(self, job):
17      """
18        Called here when a new job is started. If you want
19        to do anything with the Job, you must register
20        events you want to receive.
21      """
22      events = JobEvents()         # create instance of Job class
23      events.job = job             # save Bacula's job pointer
24      job.set_events(events)       # register events desired
25      sys.stderr = events          # send error output to Bacula
26      sys.stdout = events          # send stdout to Bacula
27      jobid = job.JobId; client = job.Client
28      numvols = job.NumVols 
29      job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols) 
30
31   # Bacula Job is going to terminate
32   def JobEnd(self, job):    
33      jobid = job.JobId
34      client = job.Client 
35      job.JobReport="Python Dir JobEnd output: JobId=%d Status=%s Client=%s.\n" % (jobid, job.JobStatus, client) 
36
37   # Called here when the Bacula daemon is going to exit
38   def Exit(self, job):
39       print "Daemon exiting."
40      
41 bacula.set_events(BaculaEvents()) # register daemon events desired
42
43 """
44   There are the Job events that you can receive.
45 """
46 class JobEvents(object):
47   def __init__(self):
48      # Called here when you instantiate the Job. Not
49      # normally used
50      noop = 1
51
52   def JobInit(self, job):
53      noop = 1
54      if (job.JobId < 2):
55         startid = job.run("run kernsave")
56         job.JobReport = "Python started new Job: jobid=%d\n" % startid
57      print "name=%s version=%s conf=%s working=%s" % (bacula.Name, bacula.Version, bacula.ConfigFile, bacula.WorkingDir)
58
59   def JobRun(self, job):
60      noop = 1
61
62   def NewVolume(self, job):
63      jobid = job.JobId
64      client = job.Client 
65      numvol = job.NumVols;
66      print job.CatalogRes
67      job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol)
68      job.JobReport="Python before New Volume set for Job.\n"
69      Vol = "TestA-%d" % numvol
70      job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol)
71      job.VolumeName="TestA-%d" % numvol 
72      job.JobReport="Python after New Volume set for Job.\n"  
73      return 1
74
75   def VolumePurged(self, job):
76      noop = 1
77
78   # Pass output back to Bacula
79   def write(self, text):
80      self.job.write(text)
81
82   # Open file to be backed up. file is the filename
83   #  NOT YET IMPLEMENTED
84   def open(self, file):
85      print "Open %s called" % file
86      self.fd = open('m.py', 'rb')
87      jobid = self.job.JobId
88      print "Open: JobId=%d" % jobid
89
90   # Read file data into Bacula memory buffer (mem)
91   #  return length read. 0 => EOF, -1 => error
92   #  NOT YET IMPLEMENTED
93   def read(self, mem):
94      print "Read called\n"
95      len = self.fd.readinto(mem)
96      print "Read %s bytes into mem.\n" % len
97      return len
98
99   # Close file
100   #  NOT YET IMPLEMENTED
101   def close(self):
102      self.fd.close()