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