5 - Pouvoir configurer les algos de cryptage
6 - Pouvoir choisir de crypter dans le fileset
7 - Pouvoir choisir de forcer le cryptage dans la definition
10 Lister les fichiers sur le client :
11 - Avoir un mode comme restore
12 - Avoir une api list files client=xxx where=yyy
13 Dans la filed/job.c:handle_client_request, ajouter une commande
14 dans struct s_cmds cmds; et si possible utiliser le code de finlib
15 - A voir, pourquoi ne pas utiliser mark/unmark comme dans une resto
16 pour construire un fileset ?
18 Sauvegarde des postes nomades :
19 - Le client doit pouvoir initier les sauvegardes
20 - Au niveau firewall, il ne doit y avoir que 1 connexion (1)
24 | +-------+ (4) +---------------+
26 +--------+ (5) +-------+ | | | | DIRECTOR |
27 | |<------+ | | | |---->| |
28 | FD | | PROXY | | | PROXY | (3) +-------+-------+
29 | +-------> <-+---> | |
30 +--------+ (6) +-^-----+ (2) | | +-------v-------+
32 | | | +-----> STORAGE |
34 Initiate backup | | +-------+ +---------------+
39 (1) & (2) BEGIN Backup
40 (3) Bconsole like - Run command
41 (4) & (5) DIR -> (PROX <-> PROX) -> FD connection (fileset, storage..)
42 (6) & (7) FD -> (PROX <-> PROX) -> SD
44 - Utilisation d'une sorte proxy https
48 p Ajouter l'historique dans la bconsole
49 - Ajouter une commande pour bloquer un drive
52 - Avoir un SD sur chaque FD
53 - Avoir une serie de script qui :
54 * bascule le lecteur en local
56 * le script de mtx doit faire ses demandes au director sur
59 - Tout le monde voit le lecteur, et le client doit demander la permission
60 pour despooler son bloc de XG au director.
62 - On fait du round robbin avec tout le monde, et on utilise un disque
65 - 50 clients qui spoolent en local, c'est plus rapide que vers 1 point
70 - Ajouter la gestion des stats dans le client et le sd
71 - Ajouter un M_STATS dans la gestion des messages
72 - générer un format simple UNIXSTAMP|label|unit|value
73 - possibilité d'ajouter ça dans la base de donnée ou dans rrd
77 - apr (apache portable runtime) pour les exemples de chargement
78 de module dynamique (win32, linux, etc...)
79 http://svn.apache.org/viewvc/apr/apr/trunk/dso/
82 http://modules.apache.org/doc/API.html
84 - comment charger les librairies dependantes d'un hook
88 - nommer les hook (a la place d'une structure de pointeur)
90 "action", mod_action_handler
105 - configuration... (ajout automatique avant de charger le fichier de conf)
112 - exemple de hook/module
114 - checksum (MD5/SHA1)
116 - compression (LZO, GZIP, BZIP)
118 - initialiser le jcr avec seulement les hooks utiles
121 - declarer les modules utiles
122 - les options doivent utiliser le nom du module
132 - Ajouter mount,umount,release,status pour chaque device
133 - Ajouter le viewfileset dans l'interface de resto
134 x Ajouter la labelisation de bande et l'ajout de media (add et label)
135 - Ajouter la possibilité de lancer des migrations et des
137 - Quand on deplace un media, il faut prendre le enabled depuis
138 la nouvelle localisation (en javascript)
139 o On ajoute une combo (Backup/Migration/Verify)
140 o On peut regarder dans l'historique des job quel est le bon type
141 o Quand on relance, on spécifie le type directement
142 o Il faut adapter le status client pour traiter les autres type
143 de job (par exemple, si c'est pas un backup/restore, pas de status dir)
146 - Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
149 groupe1 v v x w v v v q1
150 |-- s1 v v v v v v v q2
154 ---8<-------8<--------8<--------8<----------8<------------------
156 ALTER TABLE Status ADD COLUMN severity int;
157 UPDATE status SET severity = 15;
158 UPDATE status SET severity = 100 where jobstatus = 'f';
159 UPDATE status SET severity = 90 where jobstatus = 'A';
160 UPDATE status SET severity = 10 where jobstatus = 'T';
162 -- Affiche par groupe et date le statut des jobs (q1)
163 SELECT date_part('day', date) AS day, date, client_group_name, JobStatusLong,
164 JobStatus, nb_job, joberrors
166 SELECT date_trunc('day', job_old.StartTime) AS date,
167 MAX(severity) AS severity,
169 SUM(JobErrors) AS joberrors,
172 JOIN client_group_member USING (ClientId)
173 JOIN client_group USING (client_group_id)
174 JOIN Status USING (JobStatus)
175 WHERE StartTime > '2007-10-01' AND StartTime < '2007-11-19'
177 GROUP BY client_group_name, date
178 ) AS sub JOIN Status USING (severity)
179 ORDER BY client_group_name, date
181 -- Affiche un client_group en detail (q2)
182 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
184 SELECT date_trunc('day', job_old.StartTime) AS date,
185 Client.Name AS client,
186 MAX(severity) AS severity,
188 SUM(JobErrors) AS joberrors
190 JOIN client_group_member USING (ClientId)
191 JOIN client_group USING (client_group_id)
192 JOIN Client USING (ClientId)
193 JOIN Status USING (JobStatus)
194 WHERE StartTime > '2007-10-01'
195 AND client_group_name = '0-SAVES_SIGMA1'
197 GROUP BY client, date
198 ) AS sub JOIN Status USING (severity)
199 ORDER BY client, date
201 ---8<-------8<--------8<--------8<----------8<------------------
203 - Quand on clique dessus on arrive sur la liste des jobs en question
207 - Ajouter une variable pour remplacer NOW() dans les queries
208 origin = arg->{origin} || NOW();
209 - Ajouter des stats en %
211 ---8<-------8<--------8<--------8<----------8<------------------
213 SELECT client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
217 SUM(CASE WHEN JobStatus='T' THEN 1
218 ELSE 0 END) AS nb_ok,
219 SUM(CASE WHEN JobStatus='A' THEN 1
220 WHEN JobStatus='f' THEN 1
221 WHEN JobStatus='E' THEN 1
222 WHEN JobStatus='e' THEN 1
223 ELSE 0 END) AS nb_other,
226 JOIN client_group_member USING (ClientId)
227 JOIN client_group USING (client_group_id)
229 WHERE StartTime > '2007-10-01'
230 GROUP BY client_group_name
233 SELECT Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
237 SUM(CASE WHEN JobStatus='T' THEN 1
238 ELSE 0 END) AS nb_ok,
239 SUM(CASE WHEN JobStatus='A' THEN 1
240 WHEN JobStatus='f' THEN 1
241 WHEN JobStatus='E' THEN 1
242 WHEN JobStatus='e' THEN 1
243 ELSE 0 END) AS nb_other,
246 JOIN Client USING (ClientId)
248 WHERE StartTime > '2007-10-01'
249 AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
255 ---8<-------8<--------8<--------8<----------8<------------------
258 ------------- x 100 => par groupe de client
261 - Il faut ajouter une estimation des jobs qui auraient
262 du se lancer (a voir avec les schedules)
264 - Affichage en html/csv pour des stats
265 grp, nb client, nb backup, nb ok, nb err, nb cancel,
266 %ok, nb files, nb gig, time
268 - Ajouter la liste des fichiers (quand il n'y en a pas trop)
269 - Ajouter un mode qui compte le nombre de fichier sous bfileview
270 x Ajouter un bouton suivant/precedant dans la vue des logs
271 x Ajouter la liste des medias qui vont/ont expirer et les pruner
272 x Fixer les purge/prune de multiple volumes
273 x Ajouter une gestion des utilisateurs avec des roles
274 o Liste des roles possibles
288 o Avoir des profiles ayant certains roles
290 * customer (view_stats, view_history, view_log)
291 * production (all - configure)
294 o Pour faire la difference entre les groupes de la vue et
295 les groupes d'acl, il faut ajouter un champs dans la table
296 client_group (visible bool).
298 o Ajout de 4 tables dans le catalogue
299 - bweb_user (userid, username, passwd, comment) passwd with apache ?
300 - bweb_role (roleid, rolename)
301 - bweb_role_member (roleid, userid)
303 - bweb_client_group_acl (client_group_id, userid)
304 - bweb_pool_acl (poolid, userid)
306 o Il faudrait aussi pouvoir choisir le login admin...
308 x On specifie par user si on veut filter par les groupes (gestion un peu
309 chiante, il faut ajouter les hosts dans les groupes, sinon, ils sont
312 x On recupere ce champs quand on check les can_do(); et apres, on le regarde
313 avant d'envoyer le JOIN de filtre. (Attention, admin n'est pas soumis a ca)
315 x On peut ajouter une option dans la Config pour activer ce mode ou pas.
317 x Regarder la possibilite de recuperer toutes les roles au debut pour
318 adapter les pages web... Il n'y a que les menus/actions autorises qui
319 seraient affiches. (bp cancel => role cancel_job, configuration => role configure)
321 * on utilise le commentaire depuis une page web, comme ca
322 on gere la traduction sans toucher a la base
324 CREATE TABLE bweb_user
326 userid serial not null,
327 username text not null,
328 use_acl boolean default false,
329 comment text default '',
330 passwd text default '',
333 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
335 CREATE TABLE bweb_role
337 roleid serial not null,
338 rolename text not null,
339 -- comment text default '',
342 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
344 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
345 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
346 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
347 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
348 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
349 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
350 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
351 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
352 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
353 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
354 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
356 CREATE TABLE bweb_role_member
358 roleid integer not null,
359 userid integer not null,
360 primary key (roleid, userid)
363 CREATE TABLE bweb_client_group_acl
365 client_group_id integer not null,
366 userid integer not null,
367 primary key (client_group_id, userid)
370 - Integrer brestore en mode javascript
372 .ls_dir(jobid,pathid)
373 .ls_file(jobid,pathid)
374 .get_pathid(jobid,"/")
375 .genbsr (fileid, fileid, fileid, fileid, fileid...)
376 -> on peut utiliser une table dans la base pour faire ca
379 > 1. Unloading tapes assistent.
381 > I'm using a script which selects tapes to unload. The idea is to
382 > remove all volumes from the library that contain a current set of
383 > backups. Basically, find the volumes from the most recent full backups
384 > and all volumes that depend on these. Ignore older fulls and their
385 > differentials and incrementals.
387 > This is to ensure that, at the time volumes are unloaded, a complete
388 > set of backups can be stored safely.
391 Jobs -> Job Zoom -> View Media -> Select them -> Eject
393 Yes, it's a very good idea, i see no difficulty to implement this kind of
397 Media -> Made a Safe backup set
398 -> Select Client(s) -> Select Job(s) -> Backup set
400 I think that i can do some sort of assistant to that.
401 (with next, next next)
404 > While volumes are prepared for unloading, I disable them, so Bacula
405 > will not try to use them. Later, they are automatically re-enabled.
407 x Do you use the Enabled flag for that ? It's a good idea.
409 > Move these volumes (if possible) to the export slots.
411 I have already some code for that, but at this time it doesn't use
412 the mtx-script from bacula. (or bacula-sd commands)
414 I have to change this, so user have a working mtx-scripts, and we use
415 it everywhere. (The best solution is to send command to bacula-dir)
417 > Later, request volumes to fill up the pools so there are usable
418 > volumes for later backups around. Load these volumes from the import
419 > slots to the regular working slots, and do an 'update slots'.
421 I use the Scratch pool for this sort of things, but we could use an other
424 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
427 - Bug dans la determination des jours de la semaine (exemple de la full
428 le premier dimanche du mois)
431 - Avoir la version 2.0 et la version 2.2 en ligne (pour que les utilisateurs
432 ne se trompent pas dans les versions)
433 - Supprimer les (need bacula >= 1.xx) (dans la derniere version)
436 - Faire un test de non regression avec pleins d'erreur
437 o pb inclusion (distante, locale)
438 o pb exclusion (distante, locale)
439 o pb execution de commande
440 o pb de config avec test du -t des differents daemon
441 x Utiliser PQescapeStringConn a la place de PQescapeString
442 - Utiliser la lib pcre
443 - Rendre les scripts bacula-ctl-xxx LSB
444 x Pouvoir utiliser les uid numeriques dans le backup des acl
445 - Avoir un script qui dump la configuration pour faire
447 p modifier l'organisation de la table version (pour pouvoir ajouter
448 les versions de bweb par exemple)
449 - utiliser la meme fonction pour read_close_session et append_close_session
450 - pb dans le message de chargement d'une bande pendant une resto
452 Please mount Volume "R40175" or label a new one for
453 Pas le bon message pour une resto (label a new one)