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
133 Btw., the vertical axis was the number of files
134 while the size of the ballon is the volume (in MB
135 or GB). Those could be switched, though, depending on what looks better.
137 What are you using for color-coding the ballons?
138 That could be a variety of different things like
139 client, client group, backup level (full,
140 incremental, etc.,) that adds context to the size
141 and position that is already present in the chart.
143 - Ajouter mount,umount,release,status pour chaque device
144 - Ajouter le viewfileset dans l'interface de resto
145 x Ajouter la labelisation de bande et l'ajout de media (add et label)
146 - Ajouter la possibilité de lancer des migrations et des
148 - Quand on deplace un media, il faut prendre le enabled depuis
149 la nouvelle localisation (en javascript)
150 o On ajoute une combo (Backup/Migration/Verify)
151 o On peut regarder dans l'historique des job quel est le bon type
152 o Quand on relance, on spécifie le type directement
153 o Il faut adapter le status client pour traiter les autres type
154 de job (par exemple, si c'est pas un backup/restore, pas de status dir)
157 - Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
160 groupe1 v v x w v v v q1
161 |-- s1 v v v v v v v q2
165 ---8<-------8<--------8<--------8<----------8<------------------
167 ALTER TABLE Status ADD COLUMN severity int;
168 UPDATE status SET severity = 15;
169 UPDATE status SET severity = 100 where jobstatus = 'f';
170 UPDATE status SET severity = 90 where jobstatus = 'A';
171 UPDATE status SET severity = 10 where jobstatus = 'T';
173 -- Affiche par groupe et date le statut des jobs (q1)
174 SELECT date_part('day', date) AS day, date, client_group_name, JobStatusLong,
175 JobStatus, nb_job, joberrors
177 SELECT date_trunc('day', job_old.StartTime) AS date,
178 MAX(severity) AS severity,
180 SUM(JobErrors) AS joberrors,
183 JOIN client_group_member USING (ClientId)
184 JOIN client_group USING (client_group_id)
185 JOIN Status USING (JobStatus)
186 WHERE StartTime > '2007-10-01' AND StartTime < '2007-11-19'
188 GROUP BY client_group_name, date
189 ) AS sub JOIN Status USING (severity)
190 ORDER BY client_group_name, date
192 -- Affiche un client_group en detail (q2)
193 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
195 SELECT date_trunc('day', job_old.StartTime) AS date,
196 Client.Name AS client,
197 MAX(severity) AS severity,
199 SUM(JobErrors) AS joberrors
201 JOIN client_group_member USING (ClientId)
202 JOIN client_group USING (client_group_id)
203 JOIN Client USING (ClientId)
204 JOIN Status USING (JobStatus)
205 WHERE StartTime > '2007-10-01'
206 AND client_group_name = '0-SAVES_SIGMA1'
208 GROUP BY client, date
209 ) AS sub JOIN Status USING (severity)
210 ORDER BY client, date
212 ---8<-------8<--------8<--------8<----------8<------------------
214 - Quand on clique dessus on arrive sur la liste des jobs en question
218 - Ajouter une variable pour remplacer NOW() dans les queries
219 origin = arg->{origin} || NOW();
220 - Ajouter des stats en %
222 ---8<-------8<--------8<--------8<----------8<------------------
224 SELECT client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
228 SUM(CASE WHEN JobStatus='T' THEN 1
229 ELSE 0 END) AS nb_ok,
230 SUM(CASE WHEN JobStatus='A' THEN 1
231 WHEN JobStatus='f' THEN 1
232 WHEN JobStatus='E' THEN 1
233 WHEN JobStatus='e' THEN 1
234 ELSE 0 END) AS nb_other,
237 JOIN client_group_member USING (ClientId)
238 JOIN client_group USING (client_group_id)
240 WHERE StartTime > '2007-10-01'
241 GROUP BY client_group_name
244 SELECT Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
248 SUM(CASE WHEN JobStatus='T' THEN 1
249 ELSE 0 END) AS nb_ok,
250 SUM(CASE WHEN JobStatus='A' THEN 1
251 WHEN JobStatus='f' THEN 1
252 WHEN JobStatus='E' THEN 1
253 WHEN JobStatus='e' THEN 1
254 ELSE 0 END) AS nb_other,
257 JOIN Client USING (ClientId)
259 WHERE StartTime > '2007-10-01'
260 AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
266 ---8<-------8<--------8<--------8<----------8<------------------
269 ------------- x 100 => par groupe de client
272 - Il faut ajouter une estimation des jobs qui auraient
273 du se lancer (a voir avec les schedules)
275 - Affichage en html/csv pour des stats
276 grp, nb client, nb backup, nb ok, nb err, nb cancel,
277 %ok, nb files, nb gig, time
279 - Ajouter la liste des fichiers (quand il n'y en a pas trop)
280 - Ajouter un mode qui compte le nombre de fichier sous bfileview
281 x Ajouter un bouton suivant/precedant dans la vue des logs
282 x Ajouter la liste des medias qui vont/ont expirer et les pruner
283 x Fixer les purge/prune de multiple volumes
284 x Ajouter une gestion des utilisateurs avec des roles
285 o Liste des roles possibles
299 o Avoir des profiles ayant certains roles
301 * customer (view_stats, view_history, view_log)
302 * production (all - configure)
305 o Pour faire la difference entre les groupes de la vue et
306 les groupes d'acl, il faut ajouter un champs dans la table
307 client_group (visible bool).
309 o Ajout de 4 tables dans le catalogue
310 - bweb_user (userid, username, passwd, comment) passwd with apache ?
311 - bweb_role (roleid, rolename)
312 - bweb_role_member (roleid, userid)
314 - bweb_client_group_acl (client_group_id, userid)
315 - bweb_pool_acl (poolid, userid)
317 o Il faudrait aussi pouvoir choisir le login admin...
319 x On specifie par user si on veut filter par les groupes (gestion un peu
320 chiante, il faut ajouter les hosts dans les groupes, sinon, ils sont
323 x On recupere ce champs quand on check les can_do(); et apres, on le regarde
324 avant d'envoyer le JOIN de filtre. (Attention, admin n'est pas soumis a ca)
326 x On peut ajouter une option dans la Config pour activer ce mode ou pas.
328 x Regarder la possibilite de recuperer toutes les roles au debut pour
329 adapter les pages web... Il n'y a que les menus/actions autorises qui
330 seraient affiches. (bp cancel => role cancel_job, configuration => role configure)
332 * on utilise le commentaire depuis une page web, comme ca
333 on gere la traduction sans toucher a la base
335 CREATE TABLE bweb_user
337 userid serial not null,
338 username text not null,
339 use_acl boolean default false,
340 comment text default '',
341 passwd text default '',
344 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
346 CREATE TABLE bweb_role
348 roleid serial not null,
349 rolename text not null,
350 -- comment text default '',
353 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
355 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
356 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
357 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
358 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
359 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
360 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
361 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
362 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
363 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
364 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
365 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
367 CREATE TABLE bweb_role_member
369 roleid integer not null,
370 userid integer not null,
371 primary key (roleid, userid)
374 CREATE TABLE bweb_client_group_acl
376 client_group_id integer not null,
377 userid integer not null,
378 primary key (client_group_id, userid)
381 - Integrer brestore en mode javascript
383 .ls_dir(jobid,pathid)
384 .ls_file(jobid,pathid)
385 .get_pathid(jobid,"/")
386 .genbsr (fileid, fileid, fileid, fileid, fileid...)
387 -> on peut utiliser une table dans la base pour faire ca
390 > 1. Unloading tapes assistent.
392 > I'm using a script which selects tapes to unload. The idea is to
393 > remove all volumes from the library that contain a current set of
394 > backups. Basically, find the volumes from the most recent full backups
395 > and all volumes that depend on these. Ignore older fulls and their
396 > differentials and incrementals.
398 > This is to ensure that, at the time volumes are unloaded, a complete
399 > set of backups can be stored safely.
402 Jobs -> Job Zoom -> View Media -> Select them -> Eject
404 Yes, it's a very good idea, i see no difficulty to implement this kind of
408 Media -> Made a Safe backup set
409 -> Select Client(s) -> Select Job(s) -> Backup set
411 I think that i can do some sort of assistant to that.
412 (with next, next next)
415 > While volumes are prepared for unloading, I disable them, so Bacula
416 > will not try to use them. Later, they are automatically re-enabled.
418 x Do you use the Enabled flag for that ? It's a good idea.
420 > Move these volumes (if possible) to the export slots.
422 I have already some code for that, but at this time it doesn't use
423 the mtx-script from bacula. (or bacula-sd commands)
425 I have to change this, so user have a working mtx-scripts, and we use
426 it everywhere. (The best solution is to send command to bacula-dir)
428 > Later, request volumes to fill up the pools so there are usable
429 > volumes for later backups around. Load these volumes from the import
430 > slots to the regular working slots, and do an 'update slots'.
432 I use the Scratch pool for this sort of things, but we could use an other
435 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
438 - Bug dans la determination des jours de la semaine (exemple de la full
439 le premier dimanche du mois)
442 - Avoir la version 2.0 et la version 2.2 en ligne (pour que les utilisateurs
443 ne se trompent pas dans les versions)
444 - Supprimer les (need bacula >= 1.xx) (dans la derniere version)
447 - Faire un test de non regression avec pleins d'erreur
448 o pb inclusion (distante, locale)
449 o pb exclusion (distante, locale)
450 o pb execution de commande
451 o pb de config avec test du -t des differents daemon
452 x Utiliser PQescapeStringConn a la place de PQescapeString
453 - Utiliser la lib pcre
454 - Rendre les scripts bacula-ctl-xxx LSB
455 x Pouvoir utiliser les uid numeriques dans le backup des acl
456 - Avoir un script qui dump la configuration pour faire
458 p modifier l'organisation de la table version (pour pouvoir ajouter
459 les versions de bweb par exemple)
460 - utiliser la meme fonction pour read_close_session et append_close_session
461 - pb dans le message de chargement d'une bande pendant une resto
463 Please mount Volume "R40175" or label a new one for
464 Pas le bon message pour une resto (label a new one)
465 - Impossible de lancer une restauration en meme temps qu'un backup sur
466 un autochanger. Le code dans jobq.c qui controle les MaxConcurrentJobs
467 ne prend pas en compte les autochanger avec plusieurs drives. Ce code
468 fait surement doublon avec le nouveau code de reservation.
469 Il faudrait le simplifier, et compter les jobs de restauration comme les
470 jobs normaux. Le patch précédent ne changeait pas le MaxConcurrentJobs
471 comme il faut à la fin du backup.
474 o Envoyer la liste de tous les fichiers au client dans un format simple
475 /path/ LSTAT # un / a la fin pour un repertoire
478 o Le client construit un hash disque (ou en memoire ou les deux)
479 o A chaque repertoire/fichier on verifie la presence du fichier dans le hash
480 et on peut aussi comparer date/taille/bloc
481 - Si le fichier n'est pas dedans, on le backup
482 - Si le fichier est present on verifie les attributs et on mark le fichier comme vu
483 o A la fin, on parcours tous le hash pour trouver les fichiers qui ne sont pas vu et
484 on envoie la liste des fichiers supprimes avec le fileindex=0 et pourquoi pas la date
485 du jour dans le champ mtime
486 o Utiliser systematiquement l'option ignorecase sous windows
487 p Ajouter une option pour avoir la table de stat
488 Enable Statistic = yes/no
489 Statistic retention = 4 years
492 o Utiliser une alist dans les runscripts
503 console = "xxxx", "yyyy", "zzzz"
507 o fix segfault when config files are empty