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
50 - Ajouter de la completion automatique sur les commandes
53 - Avoir un SD sur chaque FD
54 - Avoir une serie de script qui :
55 * bascule le lecteur en local
57 * le script de mtx doit faire ses demandes au director sur
60 - Tout le monde voit le lecteur, et le client doit demander la permission
61 pour despooler son bloc de XG au director.
63 - On fait du round robbin avec tout le monde, et on utilise un disque
66 - 50 clients qui spoolent en local, c'est plus rapide que vers 1 point
71 - Ajouter la gestion des stats dans le client et le sd
72 - Ajouter un M_STATS dans la gestion des messages
73 - générer un format simple UNIXSTAMP|label|unit|value
74 - possibilité d'ajouter ça dans la base de donnée ou dans rrd
78 - apr (apache portable runtime) pour les exemples de chargement
79 de module dynamique (win32, linux, etc...)
80 http://svn.apache.org/viewvc/apr/apr/trunk/dso/
83 http://modules.apache.org/doc/API.html
85 - comment charger les librairies dependantes d'un hook
89 - nommer les hook (a la place d'une structure de pointeur)
91 "action", mod_action_handler
106 - configuration... (ajout automatique avant de charger le fichier de conf)
113 - exemple de hook/module
115 - checksum (MD5/SHA1)
117 - compression (LZO, GZIP, BZIP)
119 - initialiser le jcr avec seulement les hooks utiles
122 - declarer les modules utiles
123 - les options doivent utiliser le nom du module
134 SELECT strftime('%Y-%m-%d', Job.StartTime) FROM Job LIMIT 1;
135 x Voir les groupes d'un client
136 - Overview, pouvoir choisir entre la job_old et l'autre
137 - utiliser des noms de table plus proche (brestore -> bweb ?)
139 Btw., the vertical axis was the number of files
140 while the size of the ballon is the volume (in MB
141 or GB). Those could be switched, though, depending on what looks better.
143 What are you using for color-coding the ballons?
144 That could be a variety of different things like
145 client, client group, backup level (full,
146 incremental, etc.,) that adds context to the size
147 and position that is already present in the chart.
149 x Ajouter mount,umount,release,status pour chaque device
150 - Ajouter le viewfileset dans l'interface de resto
151 x Ajouter la labelisation de bande et l'ajout de media (add et label)
152 - Ajouter la possibilité de lancer des migrations et des
154 - Quand on deplace un media, il faut prendre le enabled depuis
155 la nouvelle localisation (en javascript)
156 o On ajoute une combo (Backup/Migration/Verify)
157 o On peut regarder dans l'historique des job quel est le bon type
158 o Quand on relance, on spécifie le type directement
159 o Il faut adapter le status client pour traiter les autres type
160 de job (par exemple, si c'est pas un backup/restore, pas de status dir)
163 x Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
166 groupe1 v v x w v v v q1
167 |-- s1 v v v v v v v q2
171 ---8<-------8<--------8<--------8<----------8<------------------
173 ALTER TABLE Status ADD COLUMN severity int;
174 UPDATE status SET severity = 15;
175 UPDATE status SET severity = 100 where jobstatus = 'f';
176 UPDATE status SET severity = 90 where jobstatus = 'A';
177 UPDATE status SET severity = 10 where jobstatus = 'T';
179 -- Affiche par groupe et date le statut des jobs (q1)
180 SELECT date_part('day', date) AS day, date, client_group_name, JobStatusLong,
181 JobStatus, nb_job, joberrors
183 SELECT date_trunc('day', job_old.StartTime) AS date,
184 MAX(severity) AS severity,
186 SUM(JobErrors) AS joberrors,
189 JOIN client_group_member USING (ClientId)
190 JOIN client_group USING (client_group_id)
191 JOIN Status USING (JobStatus)
192 WHERE StartTime > '2007-10-01' AND StartTime < '2007-11-19'
194 GROUP BY client_group_name, date
195 ) AS sub JOIN Status USING (severity)
196 ORDER BY client_group_name, date
198 -- Affiche un client_group en detail (q2)
199 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
201 SELECT date_trunc('day', job_old.StartTime) AS date,
202 Client.Name AS client,
203 MAX(severity) AS severity,
205 SUM(JobErrors) AS joberrors
207 JOIN client_group_member USING (ClientId)
208 JOIN client_group USING (client_group_id)
209 JOIN Client USING (ClientId)
210 JOIN Status USING (JobStatus)
211 WHERE StartTime > '2007-10-01'
212 AND client_group_name = '0-SAVES_SIGMA1'
214 GROUP BY client, date
215 ) AS sub JOIN Status USING (severity)
216 ORDER BY client, date
218 ---8<-------8<--------8<--------8<----------8<------------------
220 - Quand on clique dessus on arrive sur la liste des jobs en question
224 x Ajouter une variable pour remplacer NOW() dans les queries
225 origin = arg->{origin} || NOW();
226 - Ajouter des stats en %
228 ---8<-------8<--------8<--------8<----------8<------------------
230 SELECT client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
234 SUM(CASE WHEN JobStatus='T' THEN 1
235 ELSE 0 END) AS nb_ok,
236 SUM(CASE WHEN JobStatus='A' THEN 1
237 WHEN JobStatus='f' THEN 1
238 WHEN JobStatus='E' THEN 1
239 WHEN JobStatus='e' THEN 1
240 ELSE 0 END) AS nb_other,
243 JOIN client_group_member USING (ClientId)
244 JOIN client_group USING (client_group_id)
246 WHERE StartTime > '2007-10-01'
247 GROUP BY client_group_name
250 SELECT Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
254 SUM(CASE WHEN JobStatus='T' THEN 1
255 ELSE 0 END) AS nb_ok,
256 SUM(CASE WHEN JobStatus='A' THEN 1
257 WHEN JobStatus='f' THEN 1
258 WHEN JobStatus='E' THEN 1
259 WHEN JobStatus='e' THEN 1
260 ELSE 0 END) AS nb_other,
263 JOIN Client USING (ClientId)
265 WHERE StartTime > '2007-10-01'
266 AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
272 ---8<-------8<--------8<--------8<----------8<------------------
275 ------------- x 100 => par groupe de client
278 - Il faut ajouter une estimation des jobs qui auraient
279 du se lancer (a voir avec les schedules)
281 - Affichage en html/csv pour des stats
282 grp, nb client, nb backup, nb ok, nb err, nb cancel,
283 %ok, nb files, nb gig, time
285 - Ajouter la liste des fichiers (quand il n'y en a pas trop)
286 - Ajouter un mode qui compte le nombre de fichier sous bfileview
287 x Ajouter une estimation de progression du backup basé sur le nombre
288 de fichier et le nombre de Mo
289 x Ajouter un bouton suivant/precedant dans la vue des logs
290 x Ajouter la liste des medias qui vont/ont expirer et les pruner
291 x Fixer les purge/prune de multiple volumes
292 x Ajouter une gestion des utilisateurs avec des roles
293 o Liste des roles possibles
307 o Avoir des profiles ayant certains roles
309 * customer (view_stats, view_history, view_log)
310 * production (all - configure)
313 o Pour faire la difference entre les groupes de la vue et
314 les groupes d'acl, il faut ajouter un champs dans la table
315 client_group (visible bool).
317 o Ajout de 4 tables dans le catalogue
318 - bweb_user (userid, username, passwd, comment) passwd with apache ?
319 - bweb_role (roleid, rolename)
320 - bweb_role_member (roleid, userid)
322 - bweb_client_group_acl (client_group_id, userid)
323 - bweb_pool_acl (poolid, userid)
325 o Il faudrait aussi pouvoir choisir le login admin...
327 x On specifie par user si on veut filter par les groupes (gestion un peu
328 chiante, il faut ajouter les hosts dans les groupes, sinon, ils sont
331 x On recupere ce champs quand on check les can_do(); et apres, on le regarde
332 avant d'envoyer le JOIN de filtre. (Attention, admin n'est pas soumis a ca)
334 x On peut ajouter une option dans la Config pour activer ce mode ou pas.
336 x Regarder la possibilite de recuperer toutes les roles au debut pour
337 adapter les pages web... Il n'y a que les menus/actions autorises qui
338 seraient affiches. (bp cancel => role cancel_job, configuration => role configure)
340 * on utilise le commentaire depuis une page web, comme ca
341 on gere la traduction sans toucher a la base
343 CREATE TABLE bweb_user
345 userid serial not null,
346 username text not null,
347 use_acl boolean default false,
348 comment text default '',
349 passwd text default '',
352 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
354 CREATE TABLE bweb_role
356 roleid serial not null,
357 rolename text not null,
358 -- comment text default '',
361 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
363 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
364 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
365 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
366 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
367 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
368 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
369 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
370 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
371 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
372 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
373 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
375 CREATE TABLE bweb_role_member
377 roleid integer not null,
378 userid integer not null,
379 primary key (roleid, userid)
382 CREATE TABLE bweb_client_group_acl
384 client_group_id integer not null,
385 userid integer not null,
386 primary key (client_group_id, userid)
389 - Integrer brestore en mode javascript
391 .ls_dir(jobid,pathid)
392 .ls_file(jobid,pathid)
393 .get_pathid(jobid,"/")
394 .genbsr (fileid, fileid, fileid, fileid, fileid...)
395 -> on peut utiliser une table dans la base pour faire ca
398 > 1. Unloading tapes assistent.
400 > I'm using a script which selects tapes to unload. The idea is to
401 > remove all volumes from the library that contain a current set of
402 > backups. Basically, find the volumes from the most recent full backups
403 > and all volumes that depend on these. Ignore older fulls and their
404 > differentials and incrementals.
406 > This is to ensure that, at the time volumes are unloaded, a complete
407 > set of backups can be stored safely.
410 Jobs -> Job Zoom -> View Media -> Select them -> Eject
412 Yes, it's a very good idea, i see no difficulty to implement this kind of
416 Media -> Made a Safe backup set
417 -> Select Client(s) -> Select Job(s) -> Backup set
419 I think that i can do some sort of assistant to that.
420 (with next, next next)
423 > While volumes are prepared for unloading, I disable them, so Bacula
424 > will not try to use them. Later, they are automatically re-enabled.
426 x Do you use the Enabled flag for that ? It's a good idea.
428 > Move these volumes (if possible) to the export slots.
430 I have already some code for that, but at this time it doesn't use
431 the mtx-script from bacula. (or bacula-sd commands)
433 I have to change this, so user have a working mtx-scripts, and we use
434 it everywhere. (The best solution is to send command to bacula-dir)
436 > Later, request volumes to fill up the pools so there are usable
437 > volumes for later backups around. Load these volumes from the import
438 > slots to the regular working slots, and do an 'update slots'.
440 I use the Scratch pool for this sort of things, but we could use an other
443 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
446 x Bug dans la determination des jours de la semaine (exemple de la full
447 le premier dimanche du mois)
450 - Avoir la version 2.0 et la version 2.2 en ligne (pour que les utilisateurs
451 ne se trompent pas dans les versions)
452 - Supprimer les (need bacula >= 1.xx) (dans la derniere version)
455 - Faire un test de non regression avec pleins d'erreur
456 o pb inclusion (distante, locale)
457 o pb exclusion (distante, locale)
458 o pb execution de commande
459 o pb de config avec test du -t des differents daemon
460 x Utiliser PQescapeStringConn a la place de PQescapeString
461 - Utiliser la lib pcre
462 - Rendre les scripts bacula-ctl-xxx LSB
463 x Pouvoir utiliser les uid numeriques dans le backup des acl
464 - Avoir un script qui dump la configuration pour faire
466 p modifier l'organisation de la table version (pour pouvoir ajouter
467 les versions de bweb par exemple)
468 - utiliser la meme fonction pour read_close_session et append_close_session
469 x pb dans le message de chargement d'une bande pendant une resto
471 Please mount Volume "R40175" or label a new one for
472 Pas le bon message pour une resto (label a new one)
473 - Impossible de lancer une restauration en meme temps qu'un backup sur
474 un autochanger. Le code dans jobq.c qui controle les MaxConcurrentJobs
475 ne prend pas en compte les autochanger avec plusieurs drives. Ce code
476 fait surement doublon avec le nouveau code de reservation.
477 Il faudrait le simplifier, et compter les jobs de restauration comme les
478 jobs normaux. Le patch précédent ne changeait pas le MaxConcurrentJobs
479 comme il faut à la fin du backup.
482 o Envoyer la liste de tous les fichiers au client dans un format simple
483 /path/ LSTAT # un / a la fin pour un repertoire
486 o Le client construit un hash disque (ou en memoire ou les deux)
487 o A chaque repertoire/fichier on verifie la presence du fichier dans le hash
488 et on peut aussi comparer date/taille/bloc
489 - Si le fichier n'est pas dedans, on le backup
490 - Si le fichier est present on verifie les attributs et on mark le fichier comme vu
491 o A la fin, on parcours tous le hash pour trouver les fichiers qui ne sont pas vu et
492 on envoie la liste des fichiers supprimes avec le fileindex=0 et pourquoi pas la date
493 du jour dans le champ mtime
494 o Utiliser systematiquement l'option ignorecase sous windows
495 p Ajouter une option pour avoir la table de stat
496 Enable Statistic = yes/no
497 Statistic retention = 4 years
498 o use mmap to map hash ? (on 32b, we are limited to 1 or 2GB)
501 ef->data = mmap(NULL, ef->data_size, PROT_READ,
502 MAP_SHARED, fileno(ef->fp), 0);
504 fm = CreateFileMapping((HANDLE) _get_osfhandle (fileno(ef->fp)),
510 ef->data = MapViewOfFile(fm,
518 ef = eet_internal_read(ef);
525 if (ef->data) munmap((void*)ef->data, ef->data_size);
527 if (ef->data) UnmapViewOfFile (ef->data);
530 if (ef->fp) fclose(ef->fp);
532 - Accurate backup (kern)
535 *3. FD does a normal backup and at the same time makes a list of all files on
536 the system (in the FileSet), marking which ones were just now backed up.
537 4. For each file backed up send attributes/data to SD. Note, this is done
538 during step 3 above. Minor difference, the connection with the SD is not
539 dropped at the end of the backup -- see later.
540 *5. Send the list of all files including those backed up to the Dir
541 --> Send to SD and DIR at the same time ?
542 filed/backup.c/encode_and_send_attributes
544 6. Dir computes files and deleted files.
545 7. Dir sends list of additional files (new files) to backup, and list of files
547 8. FD does backup of files Dir says to save.
548 9. FD sends SD attrs of backed up files
549 10. FD sends SD delete records for files Dir wants deleted.
550 *11. FD connection to SD can be closed, this part of the backup is done.
551 *12. FD sends new list of files just backed up to Dir
552 *13. Dir adds newly backed up files to previous list sent by FD
553 *14. Dir "batch" inserts complete new list in the catalog (I forgot the name
554 of the new table). Note this table has nothing to do with the File table.
555 *15. Dir deletes previous list in catalog.
556 *16. Dir does normal batch insert of attributes from SD, but must handle
557 deleted records. Note, this will probably happen at the same time as the
563 x Backup a file that is not in accurate list (change NOCHG to LINK, FILE, etc..)
564 * Manage JobFiles (Deleted compte pour 1 ?)
566 x Utiliser le check_accurate dans find_one et declencher le save_file
567 si besoin en desactivant le incremental.
568 x ne va pas marcher avec le strip path (la recherche est faite avant le strip path)
569 * on peut utiliser le champs LStat de la base pour noter que le fichier est supprimé...
571 CREATE TEMPORARY TABLE btemp2 AS (
572 SELECT max(FileId) as FileId, PathId, FilenameId
573 FROM (SELECT FileId, PathId, FilenameId FROM File WHERE JobId IN (39867,40341)) AS F
574 GROUP BY PathId, FilenameId )
576 SELECT Path.Path, Filename.Name, File.FileIndex, File.JobId, File.LStat
578 SELECT max(FileId) as FileId, PathId, FilenameId
579 FROM (SELECT FileId, PathId, FilenameId FROM File WHERE JobId IN (11,13)) AS F
580 GROUP BY PathId, FilenameId
582 JOIN Filename ON (Filename.FilenameId = Temp.FilenameId)
583 JOIN Path ON (Path.PathId = Temp.PathId)
584 JOIN File ON (File.FileId = Temp.FileId)
588 SELECT File.FileIndex, Path.Path, Filename.Name, File.LStat
589 FROM btemp2 JOIN Path USING (PathId) JOIN Filename USING (FilenameId)
590 JOIN File USING (FileId)
591 WHERE File.FileIndex > 0
596 SELECT DISTINCT ON (PathId, FilenameId) FileIndex, Path, Name, LStat
597 FROM File JOIN Filename USING (FilenameId) JOIN Path USING (PathId) WHERE JobId IN (40341)
598 ORDER BY PathId, FilenameId, JobId DESC
603 - Every dates have to be in ISO format
605 - JobLevel, JobStatus, etc.. have to use C constant T,R,a,A,f...
606 - Sizes are always in bytes (no suffix)
607 - Numbers have to be used without commas
608 - If we change (add) something, we must always add new elements
611 For director status on running jobs, it will be great to display :
612 JobId, Client name, Job Name, Level, Start Time and Status
615 x Utiliser une alist dans les runscripts
626 console = "xxxx", "yyyy", "zzzz"
630 x fix segfault when config files are empty
631 o cleanup bextract to use filed code