hey, we have a working fooker...
[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         
119         $sql = "select slot_no from slots where tape_name=='$rl'";
120         $res = $db->query($sql);
121         
122         foreach($res as $row) {
123                 $i = $row[0];
124         }
125         if($i != -1) {
126                 echo "$i\n";
127                 return;
128         }
129         
130         echo "0\n";
131 }
132
133 function list_tapes()
134 {
135         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
136         
137         $changer = $argv[1];
138
139         $db = db_getDB($argv[1]);
140         
141         $res = $db->query("select * from slots order by slot_no");
142         
143         $amloc = conf_getVal($changer, "automountdir");
144         
145         foreach($res as $row) {
146                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
147                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
148                 //exit(0);
149                 $tapename = $row["tape_name"];
150                 $did = $row["disk_id"];
151                 $sn = $row["slot_no"];
152                 $res2 = $db->query("select disk_name from disk_list where disk_id=='$did'");
153                 $dn = "";
154                 foreach($res2 as $row2) {
155                         $dn = $row2[0];
156                 }
157                 $tn = "$amloc/".$dn."/pbdc/".$argv[1]."/tapes/$tapename";
158                 if(file_exists($tn)) {
159                         echo "$sn:$tapename\n";
160                 } else {
161                         echo "$sn:\n";
162                 }
163         }
164         
165 }
166
167 function num_slots()
168 {
169         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
170
171         $changer = $argv[1];
172
173         $db = db_getDB($argv[1]);
174         
175         $res = $db->query("select max(slot_no) from slots");
176         
177         foreach($res as $row) {
178                 $mslot = $row[0];
179         }
180         
181         echo "$mslot\n";
182         return;
183         
184 //      $amloc = conf_getVal($changer, "automountdir");
185         
186 //      $ret = false;
187 //      $i=1;
188 //      foreach($res as $row) {
189 //              //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
190 //              //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
191 //              //exit(0);
192 //              $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
193 //              while(($file = readdir($dh)) !== false) {
194 //                      if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
195 //                              $i++;
196 //                      } else {
197 //                              //echo "didnt match: $file\n";
198 //                      }
199 //                      //exit(0);
200 //              }
201 //              closedir($dh);
202 //      }
203 //      $i--;
204         
205 //      echo "$i\n";
206         
207 }
208
209 function listall()
210 {
211         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
212         
213 }
214
215 function transfer()
216 {
217         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
218         
219 }
220 ?>