stuff
[php-bacula-disk-changer.git] / bin / pbdc-bacula.php
index 3725529..5a36526 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,209 @@ $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];
+       
+       if(file_exists("$tapeloc/$changer-drive$taped")) 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];
+
+
+       $res = $db->query("select disk_id,tape_name from slots where slot_no=='$slot'");
+       foreach($res as $row) {
+               $did = $row["disk_id"];
+               $file = $row["tape_name"];
+       }
+       
+       $res = $db->query("select disk_name from disk_list where disk_id=='$did'");
+       foreach($res as $row) {
+               $diskname = $row["disk_name"];
+       }
+       
+       if(file_exists("$tapeloc/$changer-drive$taped")) unlink("$tapeloc/$changer-drive$taped");
+       symlink("$amloc/".$diskname."/pbdc/".$argv[1]."/tapes/$file", "$tapeloc/$changer-drive$taped");
+       
+}
+
+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 slots order by slot_no");
+       
+       $amloc = conf_getVal($changer, "automountdir");
+       
+       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);
+               $tapename = $row["tape_name"];
+               $did = $row["disk_id"];
+               $sn = $row["slot_no"];
+               $res2 = $db->query("select disk_name from disk_list where disk_id=='$did'");
+               $dn = "";
+               foreach($res2 as $row2) {
+                       $dn = $row2[0];
+               }
+               $tn = "$amloc/".$dn."/pbdc/".$argv[1]."/tapes/$tapename";
+               if(file_exists($tn)) {
+                       echo "slot $sn: $tapename\n";
+               } else {
+                       echo "slot $sn:\n";
+               }
+       }
+       
+}
+
+function num_slots()
+{
+       global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
+
+       $changer = $argv[1];
+
+       $db = db_getDB($argv[1]);
+       
+       $res = $db->query("select max(slot_no) from slots");
+       
+       foreach($res as $row) {
+               $mslot = $row[0];
+       }
+       
+       return $mslot;
+       
+//     $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