]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/testing/eblstodo
update
[bacula/bacula] / bacula / patches / testing / eblstodo
1 Idees
2 ------
3
4 Cryptage :
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
8    du client.
9
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 ?
17
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)
21                     
22                                               
23              Localhost     |                  
24                            |   +-------+ (4) +---------------+
25                            |   |       |<----|               |
26 +--------+  (5)  +-------+ |   |       |     |   DIRECTOR    |
27 |        |<------+       | |   |       |---->|               |
28 |   FD   |       | PROXY | |   | PROXY | (3) +-------+-------+
29 |        +------->       <-+--->       |             |
30 +--------+  (6)  +-^-----+ (2) |       |     +-------v-------+
31                   /-\      |   |       | (7) |               |
32                    |       |   |       +----->   STORAGE     |
33                    |       |   |       |     |               |
34   Initiate backup  |       |   +-------+     +---------------+
35      --------------+       |                          
36            (1)          Network                               
37                                                       
38                                               
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
43
44  - Utilisation d'une sorte proxy https
45
46
47 Bconsole :
48  p Ajouter l'historique dans la bconsole
49  - Ajouter une commande pour bloquer un drive
50
51 Sauvegarde SAN :
52  - Avoir un SD sur chaque FD
53  - Avoir une serie de script qui :
54    * bascule le lecteur en local
55    * lance le SD
56    * le script de mtx doit faire ses demandes au director sur
57      un autochanger commun
58
59  - Tout le monde voit le lecteur, et le client doit demander la permission
60  pour despooler son bloc de XG au director.
61
62  - On fait du round robbin avec tout le monde, et on utilise un disque 
63  local pour  spooler.
64
65  - 50 clients qui spoolent en local, c'est plus rapide que vers 1 point 
66  central
67
68
69 Gestion des stats :
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
74
75 API :
76
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/
80
81  - exemple apache
82    http://modules.apache.org/doc/API.html
83
84  - comment charger les librairies dependantes d'un hook
85  ex: ACL  -> -lacl
86      GZIP -> -lgz
87
88  - nommer les hook (a la place d'une structure de pointeur)
89  ex:
90         "action", mod_action_handler
91
92  - interface
93    - opendir
94    - readdir
95    - closedir
96    - mkdir
97    - stat
98    - open
99    - close
100    - read
101    - write
102    - seek
103    - get_perm
104    - set_perm
105    - configuration... (ajout automatique avant de charger le fichier de conf)
106    - init
107    - destroy
108
109    - version
110    - name
111
112  - exemple de hook/module
113    - cryptage ?
114    - checksum (MD5/SHA1)
115    - ACL/droits
116    - compression (LZO, GZIP, BZIP)
117
118  - initialiser le jcr avec seulement les hooks utiles
119
120  - configuration 
121    - declarer les modules utiles
122    - les options doivent utiliser le nom du module
123  ex:
124       GZIP level = 2
125       ACL use uid = yes
126       etc...
127
128 TODO
129 ----
130
131 bweb :
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
136  verification. 
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)
144
145
146  - Ajouter une vue par groupe et par date (sur 7, 15 ou 30 jours)
147
148               lu ma me je ve sa di
149   groupe1     v  v  x  w  v  v  v             q1
150    |-- s1     v  v  v  v  v  v  v             q2
151    |-- s2     v  v  x  v  v  v  v
152    `-- s3     v  v  v  w  v  v  v
153
154 ---8<-------8<--------8<--------8<----------8<------------------
155
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';
161
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
165 FROM (
166   SELECT date_trunc('day', job_old.StartTime) AS date, 
167          MAX(severity)  AS severity,
168          COUNT(1)       AS nb_job,
169          SUM(JobErrors) AS joberrors,
170          client_group_name
171     FROM job_old
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'
176   
177    GROUP BY client_group_name, date
178 ) AS sub JOIN Status USING (severity)
179  ORDER BY client_group_name, date
180
181 -- Affiche un client_group en detail (q2)
182 SELECT date, client, JobStatusLong, JobStatus, nb_job, joberrors
183 FROM (
184   SELECT date_trunc('day', job_old.StartTime) AS date,
185          Client.Name    AS client,
186          MAX(severity)  AS severity,
187          COUNT(1)       AS nb_job,
188          SUM(JobErrors) AS joberrors
189     FROM job_old
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'
196
197    GROUP BY client, date
198 ) AS sub JOIN Status USING (severity)
199  ORDER BY client, date
200
201 ---8<-------8<--------8<--------8<----------8<------------------
202
203  - Quand on clique dessus on arrive sur la liste des jobs en question
204    Groupe -> Jobs
205    Job    -> Log
206
207  - Ajouter une variable pour remplacer NOW() dans les queries
208    origin = arg->{origin} || NOW();
209  - Ajouter des stats en %
210
211 ---8<-------8<--------8<--------8<----------8<------------------
212
213 SELECT  client_group_name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
214 FROM (
215
216      SELECT 
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,
224        client_group_name
225       FROM job_old 
226       JOIN client_group_member USING (ClientId)
227       JOIN client_group        USING (client_group_id)
228
229      WHERE StartTime > '2007-10-01'
230      GROUP BY client_group_name
231 ) AS subq
232
233 SELECT  Name, (nb_ok::float/(nb_ok+nb_other)*100)::numeric(6,3) AS percent_ok
234 FROM (
235
236      SELECT 
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,
244        Client.Name AS name
245       FROM job_old 
246       JOIN Client       USING (ClientId)
247
248      WHERE StartTime > '2007-10-01'
249        AND JobStatus IN ('T', 'A', 'f', 'E', 'e')
250      GROUP BY Client.Name
251 ) AS subq
252
253
254
255 ---8<-------8<--------8<--------8<----------8<------------------
256
257    Nb backup OK
258   -------------  x 100 => par groupe de client
259    Nb backup
260
261  - Il faut ajouter une estimation des jobs qui auraient
262    du se lancer (a voir avec les schedules)
263
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
267
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
275      * view_stats
276      * configure
277      * run_job
278      * run_restore
279      * view_history
280      * view_log
281      * view_media
282      * view_pool
283      * update_media
284      * view_autochanger
285      * update_autochanger
286      * cancel_job
287
288    o Avoir des profiles ayant certains roles
289      * admin (all)
290      * customer (view_stats, view_history, view_log)
291      * production (all - configure)
292      ...
293
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).
297
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)
302
303        - bweb_client_group_acl (client_group_id, userid)
304        - bweb_pool_acl (poolid, userid)
305
306  o Il faudrait aussi pouvoir choisir le login admin...
307
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
310    invisibles)
311
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)
314    
315  x On peut ajouter une option dans la Config pour activer ce mode ou pas. 
316
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)
320
321  * on utilise le commentaire depuis une page web, comme ca
322    on gere la traduction sans toucher a la base
323
324 CREATE TABLE bweb_user
325 (
326         userid       serial not null,
327         username     text not null,
328         use_acl      boolean default false,
329         comment      text default '',
330         passwd       text default '',
331         primary key (userid)
332 );
333 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
334
335 CREATE TABLE bweb_role
336 (
337         roleid       serial not null,
338         rolename     text not null,
339 --      comment      text default '',
340         primary key (roleid)
341 );
342 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
343
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');
355
356 CREATE TABLE  bweb_role_member
357 (
358         roleid       integer not null,
359         userid       integer not null,
360         primary key (roleid, userid)
361 );
362
363 CREATE TABLE  bweb_client_group_acl
364 (
365         client_group_id       integer not null,
366         userid                integer not null,
367         primary key (client_group_id, userid)
368 );
369
370  - Integrer brestore en mode javascript
371    o ajouter une api 
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
377               cf bat
378
379 > 1. Unloading tapes assistent.
380 >
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.
386 >
387 > This is to ensure that, at the time volumes are unloaded, a complete
388 > set of backups can be stored safely.
389
390 Already ok
391  Jobs -> Job Zoom -> View Media -> Select them -> Eject
392
393 Yes, it's a very good idea, i see no difficulty to implement this kind of
394 tool.
395
396 Users go to 
397   Media -> Made a Safe backup set 
398         -> Select Client(s) -> Select Job(s) -> Backup set
399
400 I think that i can do some sort of assistant to that.
401 (with next, next next)
402
403
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.
406
407 x Do you use the Enabled flag for that ? It's a good idea.
408
409 > Move these volumes (if possible) to the export slots.
410
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)
413
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)
416
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'.
420
421 I use the Scratch pool for this sort of things, but we could use an other 
422 assistant for that.
423
424 Media -> I/O -> Fill pools -> Select pool(s) -> import selections
425
426 bschedule:
427  - Bug dans la determination des jours de la semaine (exemple de la full
428   le premier dimanche du mois)
429
430 manuel :
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)
434
435 bacula :
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
446    des bug reports
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
451
452         Please mount Volume "R40175" or label a new one for
453         Pas le bon message pour une resto (label a new one)