X-Git-Url: http://git.pjr.cc/?p=php-bacula-disk-changer.git;a=blobdiff_plain;f=bin%2Fpbdc.php;h=8c67315e0df10ff4a09d75e31b3b9ca42df7e29b;hp=896ae8d2144bdeff7eaacc8ed18da98fb151ea32;hb=95682a89442421c2ae8bfbf729c255c993874d7c;hpb=0f654013ad6f1ce818f875cbe70a8f0e802abbc4 diff --git a/bin/pbdc.php b/bin/pbdc.php index 896ae8d..8c67315 100644 --- a/bin/pbdc.php +++ b/bin/pbdc.php @@ -105,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"; } @@ -155,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); } @@ -170,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); @@ -303,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