5225d4915484155259b7f86e02055b39810da9e7
[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         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         $i=1;
78         foreach($res as $row) {
79                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
80                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
81                 //exit(0);
82                 $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
83                 while(($file = readdir($dh)) !== false) {
84                         if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
85                                 if($i == $slot) {
86                                         unlink("$tapeloc/$changer-drive$taped");
87                                         symlink("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/$file", "$tapeloc/$changer-drive$taped");
88                                         exit(0);
89                                 }
90                                 $i++;
91                         } else {
92                                 //echo "didnt match: $file\n";
93                         }
94                         //exit(0);
95                 }
96                 closedir($dh);
97         }
98         
99         echo "0\n";
100         
101 }
102
103 function loaded_tape()
104 {
105         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
106         
107         $changer = $argv[1];
108         $taped = $argv[5];
109
110         $db = db_getDB($argv[1]);
111         
112         $res = $db->query("select * from disk_list order by disk_id");
113         
114         $tapeloc = conf_getVal($changer, "drivelocation");
115         $amloc = conf_getVal($changer, "automountdir");
116         
117         $rl = "";
118         if(file_exists("$tapeloc/$changer-drive$taped")) {
119                 $rl = basename(readlink("$tapeloc/$changer-drive$taped"));
120         } else {
121                 echo "0\n";
122                 exit(0);
123         }
124         
125         $ret = false;
126         $i=1;
127         foreach($res as $row) {
128                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
129                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
130                 //exit(0);
131                 $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
132                 while(($file = readdir($dh)) !== false) {
133                         if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
134                                 if($rl == $file) {
135                                         echo "$i\n";
136                                         exit(0);
137                                 }
138                                 $i++;
139                         } else {
140                                 //echo "didnt match: $file\n";
141                         }
142                         //exit(0);
143                 }
144                 closedir($dh);
145         }
146         
147         echo "0\n";
148 }
149
150 function list_tapes()
151 {
152         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
153         
154         $changer = $argv[1];
155
156         $db = db_getDB($argv[1]);
157         
158         $res = $db->query("select * from disk_list order by disk_id");
159         
160         $amloc = conf_getVal($changer, "automountdir");
161         
162         $ret = false;
163         $i=1;
164         foreach($res as $row) {
165                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
166                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
167                 //exit(0);
168                 $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
169                 while(($file = readdir($dh)) !== false) {
170                         if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
171                                 echo "slot $i: $file\n";
172                                 $i++;
173                         } else {
174                                 //echo "didnt match: $file\n";
175                         }
176                         //exit(0);
177                 }
178                 closedir($dh);
179         }
180         
181 }
182
183 function num_slots()
184 {
185         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
186
187         $changer = $argv[1];
188
189         $db = db_getDB($argv[1]);
190         
191         $res = $db->query("select * from disk_list order by disk_id");
192         
193         $amloc = conf_getVal($changer, "automountdir");
194         
195         $ret = false;
196         $i=1;
197         foreach($res as $row) {
198                 //echo "Listing tapes for disk ".$row["disk_id"].", ".$row["disk_name"]."\n";
199                 //echo "dir: $amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/\n";
200                 //exit(0);
201                 $dh = opendir("$amloc/".$row["disk_name"]."/pbdc/".$argv[1]."/tapes/");
202                 while(($file = readdir($dh)) !== false) {
203                         if(ereg("d[0-9]+_vol[0-9]+", $file)!=false) {
204                                 $i++;
205                         } else {
206                                 //echo "didnt match: $file\n";
207                         }
208                         //exit(0);
209                 }
210                 closedir($dh);
211         }
212         $i--;
213         
214         echo "$i\n";
215         
216 }
217
218 function listall()
219 {
220         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
221         
222 }
223
224 function transfer()
225 {
226         global $BASE_DATA, $BASE_LIB, $BACULA_USER, $changer, $argv;
227         
228 }
229 ?>