wrote a quick install script, and made a global config file for where to find files...
[php-bacula-disk-changer.git] / bin / pbdc-bacula.php
index 3725529..5225d49 100644 (file)
@@ -1,6 +1,10 @@
 <?php
-$BASE_LIB="../lib";
-$BASE_BIN="/usr/bin";
+
+$BASE_LIB=$_SERVER["BASE_LIB"];
+$BASE_DATA=$_SERVER["BASE_DATA"];
+$BACULA_USER=$_SERVER["BACULA_USER"];
+
+global $BASE_DATA, $BASE_LIB, $BACULA_USER, $argv;
 
 require_once "$BASE_LIB/lib.php";
 
@@ -15,5 +19,211 @@ $slot = $argv[3];
 $arc_device = $argv[4];
 $drive_index = $argv[5];
 
+$changer = $changer_dev;
+global $changer;
+
+switch($command) {
+       case "unload":
+               unload_tape();
+               break;
+       case "load":
+               load_tape();
+               break;
+       case "loaded":
+               loaded_tape();
+               break;
+       case "list":
+               list_tapes();
+               break;
+       case "slots":
+               num_slots();
+               break;
+       case "listall":
+               listall();
+               break;  
+       case "transfer":
+               transfer();
+               break;  
+}
+
+function unload_tape()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+       
+       $tapeloc = conf_getVal($changer, "drivelocation");
+       $changer = $argv[1];
+       $taped = $argv[5];
+       
+       unlink("$tapeloc/$changer-drive$taped");
+}
+
+function load_tape()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+               
+       $changer = $argv[1];
+       $taped = $argv[5];
+
+       $db = db_getDB($argv[1]);
+       
+       $res = $db->query("select * from disk_list order by disk_id");
+       
+       $tapeloc = conf_getVal($changer, "drivelocation");
+       $amloc = conf_getVal($changer, "automountdir");
+       
+       $ret = false;
+       $slot = $argv[3];
+
+       $i=1;
+       foreach($res as $row) {
+               //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
+               //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
+               //exit(0);
+               $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) {
+                               if($i == $slot) {
+                                       unlink("$tapeloc/$changer-drive$taped");
+                                       symlink("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/$file", "$tapeloc/$changer-drive$taped");
+                                       exit(0);
+                               }
+                               $i++;
+                       } else {
+                               //echo "didnt match: $file\n";
+                       }
+                       //exit(0);
+               }
+               closedir($dh);
+       }
+       
+       echo "0\n";
+       
+}
+
+function loaded_tape()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+       
+       $changer = $argv[1];
+       $taped = $argv[5];
 
+       $db = db_getDB($argv[1]);
+       
+       $res = $db->query("select * from disk_list order by disk_id");
+       
+       $tapeloc = conf_getVal($changer, "drivelocation");
+       $amloc = conf_getVal($changer, "automountdir");
+       
+       $rl = "";
+       if(file_exists("$tapeloc/$changer-drive$taped")) {
+               $rl = basename(readlink("$tapeloc/$changer-drive$taped"));
+       } else {
+               echo "0\n";
+               exit(0);
+       }
+       
+       $ret = false;
+       $i=1;
+       foreach($res as $row) {
+               //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
+               //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
+               //exit(0);
+               $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) {
+                               if($rl == $file) {
+                                       echo "$i\n";
+                                       exit(0);
+                               }
+                               $i++;
+                       } else {
+                               //echo "didnt match: $file\n";
+                       }
+                       //exit(0);
+               }
+               closedir($dh);
+       }
+       
+       echo "0\n";
+}
+
+function list_tapes()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+       
+       $changer = $argv[1];
+
+       $db = db_getDB($argv[1]);
+       
+       $res = $db->query("select * from disk_list order by disk_id");
+       
+       $amloc = conf_getVal($changer, "automountdir");
+       
+       $ret = false;
+       $i=1;
+       foreach($res as $row) {
+               //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
+               //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
+               //exit(0);
+               $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 "slot $i: $file\n";
+                               $i++;
+                       } else {
+                               //echo "didnt match: $file\n";
+                       }
+                       //exit(0);
+               }
+               closedir($dh);
+       }
+       
+}
+
+function num_slots()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+
+       $changer = $argv[1];
+
+       $db = db_getDB($argv[1]);
+       
+       $res = $db->query("select * from disk_list order by disk_id");
+       
+       $amloc = conf_getVal($changer, "automountdir");
+       
+       $ret = false;
+       $i=1;
+       foreach($res as $row) {
+               //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
+               //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
+               //exit(0);
+               $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) {
+                               $i++;
+                       } else {
+                               //echo "didnt match: $file\n";
+                       }
+                       //exit(0);
+               }
+               closedir($dh);
+       }
+       $i--;
+       
+       echo "$i\n";
+       
+}
+
+function listall()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+       
+}
+
+function transfer()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+       
+}
 ?>
\ No newline at end of file