stuff
[php-bacula-disk-changer.git] / bin / pbdc-bacula.php
1 <?php
2
3 $BASE_LIB=$_SERVER["BASE_LIB"];
4 $BASE_DATA=$_SERVER["BASE_DATA"];
5 $BACULA_USER=$_SERVER["BACULA_USER"];
6
7 global $BASE_DATA, $BASE_LIB, $BACULA_USER, $argv;
8
9 require_once "$BASE_LIB/lib.php";
10
11 if(!isset($argv[5])) {
12         echo "Usage: ".$argv[0]."  changer-device command slot archive-device drive-index\n";
13         exit(0);
14 }
15
16 $changer_dev = $argv[1];
17 $command = $argv[2];
18 $slot = $argv[3];
19 $arc_device = $argv[4];
20 $drive_index = $argv[5];
21
22 $changer = $changer_dev;
23 global $changer;
24
25 switch($command) {
26         case "unload":
27                 unload_tape();
28                 break;
29         case "load":
30                 load_tape();
31                 break;
32         case "loaded":
33                 loaded_tape();
34                 break;
35         case "list":
36                 list_tapes();
37                 break;
38         case "slots":
39                 num_slots();
40                 break;
41         case "listall":
42                 listall();
43                 break;  
44         case "transfer":
45                 transfer();
46                 break;  
47 }
48
49 function unload_tape()
50 {
51         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
52         
53         $tapeloc = conf_getVal($changer, "drivelocation");
54         $changer = $argv[1];
55         $taped = $argv[5];
56         
57         if(file_exists("$tapeloc/$changer-drive$taped")) unlink("$tapeloc/$changer-drive$taped");
58 }
59
60 function load_tape()
61 {
62         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
63                 
64         $changer = $argv[1];
65         $taped = $argv[5];
66
67         $db = db_getDB($argv[1]);
68         
69         $res = $db->query("select * from disk_list order by disk_id");
70         
71         $tapeloc = conf_getVal($changer, "drivelocation");
72         $amloc = conf_getVal($changer, "automountdir");
73         
74         $ret = false;
75         $slot = $argv[3];
76
77
78         $res = $db->query("select disk_id,tape_name from slots where slot_no=='$slot'");
79         foreach($res as $row) {
80                 $did = $row["disk_id"];
81                 $file = $row["tape_name"];
82         }
83         
84         $res = $db->query("select disk_name from disk_list where disk_id=='$did'");
85         foreach($res as $row) {
86                 $diskname = $row["disk_name"];
87         }
88         
89         if(file_exists("$tapeloc/$changer-drive$taped")) unlink("$tapeloc/$changer-drive$taped");
90         symlink("$amloc/".$diskname."/pbdc/".$argv[1]."/tapes/$file", "$tapeloc/$changer-drive$taped");
91         
92 }
93
94 function loaded_tape()
95 {
96         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
97         
98         $changer = $argv[1];
99         $taped = $argv[5];
100
101         $db = db_getDB($argv[1]);
102         
103         $res = $db->query("select * from disk_list order by disk_id");
104         
105         $tapeloc = conf_getVal($changer, "drivelocation");
106         $amloc = conf_getVal($changer, "automountdir");
107         
108         $rl = "";
109         if(file_exists("$tapeloc/$changer-drive$taped")) {
110                 $rl = basename(readlink("$tapeloc/$changer-drive$taped"));
111         } else {
112                 echo "0\n";
113                 exit(0);
114         }
115         
116         $ret = false;
117         $i=1;
118         foreach($res as $row) {
119                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
120                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
121                 //exit(0);
122                 $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
123                 while(($file = readdir($dh)) !== false) {
124                         if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
125                                 if($rl == $file) {
126                                         echo "$i\n";
127                                         exit(0);
128                                 }
129                                 $i++;
130                         } else {
131                                 //echo "didnt match: $file\n";
132                         }
133                         //exit(0);
134                 }
135                 closedir($dh);
136         }
137         
138         echo "0\n";
139 }
140
141 function list_tapes()
142 {
143         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
144         
145         $changer = $argv[1];
146
147         $db = db_getDB($argv[1]);
148         
149         $res = $db->query("select * from slots order by slot_no");
150         
151         $amloc = conf_getVal($changer, "automountdir");
152         
153         foreach($res as $row) {
154                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
155                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
156                 //exit(0);
157                 $tapename = $row["tape_name"];
158                 $did = $row["disk_id"];
159                 $sn = $row["slot_no"];
160                 $res2 = $db->query("select disk_name from disk_list where disk_id=='$did'");
161                 $dn = "";
162                 foreach($res2 as $row2) {
163                         $dn = $row2[0];
164                 }
165                 $tn = "$amloc/".$dn."/pbdc/".$argv[1]."/tapes/$tapename";
166                 if(file_exists($tn)) {
167                         echo "slot $sn: $tapename\n";
168                 } else {
169                         echo "slot $sn:\n";
170                 }
171         }
172         
173 }
174
175 function num_slots()
176 {
177         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
178
179         $changer = $argv[1];
180
181         $db = db_getDB($argv[1]);
182         
183         $res = $db->query("select max(slot_no) from slots");
184         
185         foreach($res as $row) {
186                 $mslot = $row[0];
187         }
188         
189         return $mslot;
190         
191 //      $amloc = conf_getVal($changer, "automountdir");
192         
193 //      $ret = false;
194 //      $i=1;
195 //      foreach($res as $row) {
196 //              //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
197 //              //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
198 //              //exit(0);
199 //              $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
200 //              while(($file = readdir($dh)) !== false) {
201 //                      if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
202 //                              $i++;
203 //                      } else {
204 //                              //echo "didnt match: $file\n";
205 //                      }
206 //                      //exit(0);
207 //              }
208 //              closedir($dh);
209 //      }
210 //      $i--;
211         
212 //      echo "$i\n";
213         
214 }
215
216 function listall()
217 {
218         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
219         
220 }
221
222 function transfer()
223 {
224         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
225         
226 }
227 ?>