]> git.sur5r.net Git - bacula/bacula/blob - gui/bweb/script/bweb-postgresql.sql
9d62ed198512d9ad2b3564e2f1bb5876802fdd90
[bacula/bacula] / gui / bweb / script / bweb-postgresql.sql
1 -- --------------------------------------------------
2 -- Upgrade from 2.0
3 -- --------------------------------------------------
4
5 BEGIN;
6 -- Manage Client groups in bweb
7 -- Works with postgresql and mysql5 
8
9 CREATE TABLE client_group
10 (
11     client_group_id             serial    not null,
12     client_group_name           text      not null,
13     primary key (client_group_id)
14 );
15
16 CREATE UNIQUE INDEX client_group_idx on client_group (client_group_name);
17
18 CREATE TABLE client_group_member
19 (
20     client_group_id                 integer       not null,
21     clientid          integer     not null,
22     primary key (client_group_id, clientid)
23 );
24
25 CREATE INDEX client_group_member_idx on client_group_member (client_group_id);
26
27 COMMIT;
28
29 -- --------------------------------------------------
30 -- End of upgrade from 2.0
31 -- --------------------------------------------------
32
33 --   -- creer un nouveau group
34 --   
35 --   INSERT INTO client_group (client_group_name) VALUES ('SIGMA');
36 --   
37 --   -- affecter une machine a un group
38 --   
39 --   INSERT INTO client_group_member (client_group_id, clientid) 
40 --          (SELECT client_group_id, 
41 --                 (SELECT Clientid FROM Client WHERE Name = 'slps0003-fd')
42 --             FROM client_group 
43 --            WHERE client_group_name IN ('SIGMA', 'EXPLOITATION', 'MUTUALISE'));
44 --        
45 --   
46 --   -- modifier l'affectation d'une machine
47 --   
48 --   DELETE FROM client_group_member 
49 --         WHERE clientid = (SELECT ClientId FROM Client WHERE Name = 'slps0003-fd')
50 --   
51 --   -- supprimer un groupe
52 --   
53 --   DELETE FROM client_group_member 
54 --         WHERE client_group_id = (SELECT client_group_id FROM client_group WHERE client_group_name = 'EXPLOIT')
55 --   
56 --   
57 --   -- afficher tous les clients du group SIGMA
58 --   
59 --   SELECT Name FROM Client JOIN client_group_member using (clientid) 
60 --                           JOIN client_group using (client_group_id)
61 --    WHERE client_group_name = 'SIGMA';
62 --   
63 --   -- afficher tous les groups
64 --   
65 --   SELECT client_group_name FROM client_group ORDER BY client_group_name;
66 --   
67 --   -- afficher tous les job du group SIGMA hier
68 --   
69 --   SELECT JobId, Job.Name, Client.Name, JobStatus, JobErrors
70 --     FROM Job JOIN Client              USING(ClientId) 
71 --              JOIN client_group_member USING (ClientId)
72 --              JOIN client_group        USING (client_group_id)
73 --     WHERE client_group_name = 'SIGMA'
74 --       AND Job.StartTime > '2007-03-20'; 
75 --   
76 --   -- donne des stats
77 --   
78 --   SELECT count(1) AS nb, sum(JobFiles) AS files,
79 --          sum(JobBytes) AS size, sum(JobErrors) AS joberrors,
80 --          JobStatus AS jobstatus, client_group_name
81 --     FROM Job JOIN Client              USING(ClientId) 
82 --              JOIN client_group_member USING (ClientId)
83 --              JOIN client_group        USING (client_group_id)
84 --     WHERE Job.StartTime > '2007-03-20'
85 --     GROUP BY JobStatus, client_group_name
86 --   
87 --   
88
89 CREATE PROCEDURAL LANGUAGE plpgsql;
90 BEGIN;
91
92 CREATE FUNCTION SEC_TO_TIME(timestamp with time zone)
93 RETURNS timestamp with time zone AS $$
94     select date_trunc('second', $1);
95 $$ LANGUAGE SQL;
96
97 CREATE FUNCTION SEC_TO_TIME(bigint)
98 RETURNS interval AS $$
99     select date_trunc('second', $1 * interval '1 second');
100 $$ LANGUAGE SQL;
101
102 CREATE FUNCTION UNIX_TIMESTAMP(timestamp with time zone)
103 RETURNS double precision AS $$
104     select date_part('epoch', $1);
105 $$ LANGUAGE SQL;
106
107 CREATE FUNCTION SEC_TO_INT(interval)
108 RETURNS double precision AS $$
109     select extract(epoch from $1);
110 $$ LANGUAGE SQL;
111
112 CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8 AS $$
113 DECLARE
114 val int8;
115 b64 varchar(64);
116 size varchar(64);
117 i int;
118 BEGIN
119 size := split_part($2, ' ', $1);
120 b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
121 val := 0;
122 FOR i IN 1..length(size) LOOP
123 val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(length(size)-i));
124 END LOOP;
125 RETURN val;
126 END;
127 $$ language 'plpgsql';
128
129 COMMIT;
130
131