stuff
[php-bacula-disk-changer.git] / bin / pbdc.php
index 0e66657..8c67315 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 
-$BASE_LIB="../lib";
-$BASE_DATA="../db";
-$BACULA_USER="paulr";
+$BASE_LIB=$_SERVER["BASE_LIB"];
+$BASE_DATA=$_SERVER["BASE_DATA"];
+$BACULA_USER=$_SERVER["BACULA_USER"];
 
 global $BASE_DATA, $BASE_LIB, $BACULA_USER;
 
@@ -49,7 +49,38 @@ function bacula_config()
 
        $db = db_getDB($argv[1]);
        
+       $ntapes = conf_getVal($changer, "ndrives");
+       $tapeloc = conf_getVal($changer, "drivelocation");
+       
        // TODO: do this bit
+       // bacula-sd.conf
+       ?>
+Autochanger {
+  Name = <?php echo "$changer\n"?>
+  <?php
+  for($i=0; $i<$ntapes; $i++) {
+       echo "Device = \"$changer-drive$i\"\n";
+  } 
+  ?>
+  Changer Command = "/usr/local/bin/vchanger %c %o %S %a %d"
+  Changer Device = "<?php echo $changer ?>"
+}
+
+<?php 
+       for($i=0; $i < $ntapes; $i++) {
+?>
+Device {
+  Name = <?php echo "\"$changer-drive$i\"\n" ?>
+  DriveIndex = <?php echo "$i\n" ?>
+  Autochanger = yes;
+  DeviceType = File
+  MediaType = File
+  ArchiveDevice = <?php echo "\"$tapeloc/$changer-drive$i\"\n" ?>
+  RemovableMedia = no;
+  RandomAccess = yes;
+}
+<?php
+       }
 }
 
 function pbdc_status()
@@ -74,7 +105,13 @@ function pbdc_status()
                $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
                while(($file = readdir($dh)) !== false) {
                        if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
-                               echo "Tape: $file\n";
+                               $sql = "select slot_no from slots where tape_name=='$file'";
+                               $res2 = $db->query($sql);
+                               if($res2) {
+                                       foreach($res2 as $row2)
+                                       $slot = $row2["slot_no"];
+                               } else $slot = "none";
+                               echo "Tape: $file (slot $sln)\n";
                        } else {
                                //echo "didnt match: $file\n";
                        }
@@ -124,8 +161,9 @@ function init()
        
        // check if we are the bacula user
        $user = posix_getlogin();
+       $user = $_SERVER["USER"];
        if($user != $BACULA_USER) {
-               echo "This command must be run as the bacula user\n";
+               echo "This command must be run as the bacula user ($BACULA_USER not $user)\n";
                exit(0);
        }
        
@@ -139,6 +177,7 @@ function init()
                if($r == "y") {
                        echo "Ok, but its your disaster, waiting 5 seconds prior to init'ing the database (hit ctrl-c to exit)\n";
                        sleep(5);
+                       unlink("$BASE_DATA/$changer_name.db");
                } else {
                        echo "Ok, not doing it, so long chum\n";
                        exit(0);
@@ -272,6 +311,61 @@ function add_disk()
                } else {
                        echo "tape $tid already existed\n";
                }
+               add_to_slot($argv[1], $tid, $did);
        }
 }
+
+function add_to_slot($changer, $tapename, $disk_id)
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $argv;
+       
+       $db = db_getDB($changer);
+       
+       $slot = "";
+       $slots = 0;
+       $max_slot = 0;
+       
+       $res = $db->query("select * from slots");
+       foreach($res as $row) {
+               $slot[$row["slot_no"]]["diskid"] = $row["disk_id"];
+               $slot[$row["slot_no"]]["tapename"] = $row["tape_name"];
+               $slots++;
+               if($row["slot_no"] > $max_slot) $max_slot = $row["slot_no"];
+       }
+       
+       // first tape, straight in with you
+       if($slots == 0) {
+               $db->query("insert into slots values (NULL, 1, $disk_id, '$tapename')");
+               return;
+       }
+       
+       // next hunt thru the slots and see if its filled yet.
+       foreach($slot as $lk) {
+               if($lk["tapename"] == $tapename) {
+                       // tape was already there, move along
+                       return;
+               }
+       }
+       
+       // now we go from 0 to the end looking for a free slot
+       for($i=1; $i < $max_slot; $i++) {
+               if(!isset($slot[$i])) {
+                       // we have a free slot, but it shouldnt appear that way like that.. oh well.
+                       $db->query("insert into slots values (NULL, $i, $disk_id, '$tapename')");
+                       return;
+               }
+               if($slot[$i]["tapename"] == "") {
+                       // slot is free
+                       $db->query("delete from slots where slot_no='$i'");
+                       $db->query("insert into slots values (NULL, $i, $disk_id, '$tapename')");
+                       return;
+               }
+       }
+       
+       // So much error checking to do.
+       // if we made it here, we need more slots.
+       $ns = $max_slot + 1;
+       $db->query("insert into slots values (NULL, $ns, $disk_id, '$tapename')");
+       return;
+}
 ?>
\ No newline at end of file