]> git.sur5r.net Git - bacula/bacula/blob - gui/bweb/script/bweb-postgresql.sql
ebl Fix nagios script for client and group
[bacula/bacula] / gui / bweb / script / bweb-postgresql.sql
1 -- --------------------------------------------------
2 -- Upgrade from 2.2
3 -- --------------------------------------------------
4
5 ALTER TABLE Status ADD COLUMN severity int;
6 UPDATE status SET severity = 15;
7 UPDATE status SET severity = 100 where jobstatus = 'f';
8 UPDATE status SET severity = 90 where jobstatus = 'A';
9 UPDATE status SET severity = 10 where jobstatus = 'T';
10 UPDATE status SET severity = 20 where jobstatus = 'e';
11 UPDATE status SET severity = 25 where jobstatus = 'E';
12
13 -- New tables for bresto (same as brestore)
14
15 CREATE TABLE brestore_knownjobid
16 (
17      JobId integer NOT NULL,
18      CONSTRAINT brestore_knownjobid_pkey PRIMARY KEY (JobId)
19 );
20
21 CREATE TABLE brestore_pathhierarchy
22 (
23      PathId integer NOT NULL,
24      PPathId integer NOT NULL,
25      CONSTRAINT brestore_pathhierarchy_pkey PRIMARY KEY (PathId)
26 );
27
28 CREATE INDEX brestore_pathhierarchy_ppathid 
29                           ON brestore_pathhierarchy (PPathId);
30
31 CREATE TABLE brestore_pathvisibility
32 (
33       PathId integer NOT NULL,
34       JobId integer NOT NULL,
35       Size int8 DEFAULT 0,
36       Files int4 DEFAULT 0,
37       CONSTRAINT brestore_pathvisibility_pkey PRIMARY KEY (JobId, PathId)
38 );
39
40 CREATE INDEX brestore_pathvisibility_jobid
41                           ON brestore_pathvisibility (JobId);
42
43
44 -- New job log view
45
46 CREATE FUNCTION concat (text, text) RETURNS text AS '
47 DECLARE
48 result text;
49 BEGIN
50 IF $1 is not null THEN
51 result := $1 || $2;
52 END IF;
53
54 RETURN result;
55 END;
56 ' LANGUAGE plpgsql;
57
58 CREATE AGGREGATE group_concat(
59 sfunc = concat,
60 basetype = text,
61 stype = text,
62 initcond = ''
63 );
64
65 BEGIN;
66 CREATE TABLE bweb_user
67 (
68         userid       serial not null,
69         username     text not null,
70         use_acl      boolean default false,
71         enabled      boolean default true,
72         comment      text default '',
73         passwd       text default '',
74         tpl          text default '',
75         primary key (userid)
76 );
77 CREATE UNIQUE INDEX bweb_user_idx on bweb_user (username);
78
79 CREATE TABLE bweb_role
80 (
81         roleid       serial not null,
82         rolename     text not null,
83         comment      text default '',
84         primary key (roleid)
85 );
86 CREATE UNIQUE INDEX bweb_role_idx on bweb_role (rolename);
87
88 INSERT INTO bweb_role (rolename) VALUES ('r_user_mgnt');
89 INSERT INTO bweb_role (rolename) VALUES ('r_group_mgnt');
90 INSERT INTO bweb_role (rolename) VALUES ('r_configure');
91
92 INSERT INTO bweb_role (rolename) VALUES ('r_autochanger_mgnt');
93 INSERT INTO bweb_role (rolename) VALUES ('r_location_mgnt');
94 INSERT INTO bweb_role (rolename) VALUES ('r_storage_mgnt');
95 INSERT INTO bweb_role (rolename) VALUES ('r_delete_job');
96 INSERT INTO bweb_role (rolename) VALUES ('r_prune');
97 INSERT INTO bweb_role (rolename) VALUES ('r_purge');
98
99 INSERT INTO bweb_role (rolename) VALUES ('r_view_job');
100 INSERT INTO bweb_role (rolename) VALUES ('r_view_log');
101 INSERT INTO bweb_role (rolename) VALUES ('r_view_media');
102 INSERT INTO bweb_role (rolename) VALUES ('r_view_stat');
103 INSERT INTO bweb_role (rolename) VALUES ('r_view_group');
104 INSERT INTO bweb_role (rolename) VALUES ('r_view_running_job');
105
106 INSERT INTO bweb_role (rolename) VALUES ('r_run_job');
107 INSERT INTO bweb_role (rolename) VALUES ('r_cancel_job');
108 INSERT INTO bweb_role (rolename) VALUES ('r_client_status');
109
110 CREATE TABLE  bweb_role_member
111 (
112         roleid       integer not null,
113         userid       integer not null,
114         primary key (roleid, userid)
115 );
116
117 CREATE TABLE  bweb_client_group_acl
118 (
119         client_group_id       integer not null,
120         userid                integer not null,
121         primary key (client_group_id, userid)
122 );
123 COMMIT;
124 -- --------------------------------------------------
125 -- Upgrade from 2.0
126 -- --------------------------------------------------
127
128 BEGIN;
129 -- Manage Client groups in bweb
130 -- Works with postgresql and mysql5 
131
132 CREATE TABLE client_group
133 (
134     client_group_id             serial    not null,
135     client_group_name           text      not null,
136     comment                     text      default '',
137     primary key (client_group_id)
138 );
139
140 CREATE UNIQUE INDEX client_group_idx on client_group (client_group_name);
141
142 CREATE TABLE client_group_member
143 (
144     client_group_id                 integer       not null,
145     clientid          integer     not null,
146     primary key (client_group_id, clientid)
147 );
148
149 CREATE INDEX client_group_member_idx on client_group_member (client_group_id);
150
151 COMMIT;
152
153 -- --------------------------------------------------
154 -- End of upgrade from 2.0
155 -- --------------------------------------------------
156
157 --   -- creer un nouveau group
158 --   
159 --   INSERT INTO client_group (client_group_name) VALUES ('SIGMA');
160 --   
161 --   -- affecter une machine a un group
162 --   
163 --   INSERT INTO client_group_member (client_group_id, clientid) 
164 --          (SELECT client_group_id, 
165 --                 (SELECT Clientid FROM Client WHERE Name = 'slps0003-fd')
166 --             FROM client_group 
167 --            WHERE client_group_name IN ('SIGMA', 'EXPLOITATION', 'MUTUALISE'));
168 --        
169 --   
170 --   -- modifier l'affectation d'une machine
171 --   
172 --   DELETE FROM client_group_member 
173 --         WHERE clientid = (SELECT ClientId FROM Client WHERE Name = 'slps0003-fd')
174 --   
175 --   -- supprimer un groupe
176 --   
177 --   DELETE FROM client_group_member 
178 --         WHERE client_group_id = (SELECT client_group_id FROM client_group WHERE client_group_name = 'EXPLOIT')
179 --   
180 --   
181 --   -- afficher tous les clients du group SIGMA
182 --   
183 --   SELECT Name FROM Client JOIN client_group_member using (clientid) 
184 --                           JOIN client_group using (client_group_id)
185 --    WHERE client_group_name = 'SIGMA';
186 --   
187 --   -- afficher tous les groups
188 --   
189 --   SELECT client_group_name FROM client_group ORDER BY client_group_name;
190 --   
191 --   -- afficher tous les job du group SIGMA hier
192 --   
193 --   SELECT JobId, Job.Name, Client.Name, JobStatus, JobErrors
194 --     FROM Job JOIN Client              USING(ClientId) 
195 --              JOIN client_group_member USING (ClientId)
196 --              JOIN client_group        USING (client_group_id)
197 --     WHERE client_group_name = 'SIGMA'
198 --       AND Job.StartTime > '2007-03-20'; 
199 --   
200 --   -- donne des stats
201 --   
202 --   SELECT count(1) AS nb, sum(JobFiles) AS files,
203 --          sum(JobBytes) AS size, sum(JobErrors) AS joberrors,
204 --          JobStatus AS jobstatus, client_group_name
205 --     FROM Job JOIN Client              USING(ClientId) 
206 --              JOIN client_group_member USING (ClientId)
207 --              JOIN client_group        USING (client_group_id)
208 --     WHERE Job.StartTime > '2007-03-20'
209 --     GROUP BY JobStatus, client_group_name
210 --   
211 --   
212
213 CREATE PROCEDURAL LANGUAGE plpgsql;
214 BEGIN;
215
216 CREATE FUNCTION SEC_TO_TIME(timestamp with time zone)
217 RETURNS timestamp with time zone AS $$
218     select date_trunc('second', $1);
219 $$ LANGUAGE SQL;
220
221 CREATE FUNCTION SEC_TO_TIME(bigint)
222 RETURNS interval AS $$
223     select date_trunc('second', $1 * interval '1 second');
224 $$ LANGUAGE SQL;
225
226 CREATE FUNCTION UNIX_TIMESTAMP(timestamp with time zone)
227 RETURNS double precision AS $$
228     select date_part('epoch', $1);
229 $$ LANGUAGE SQL;
230
231 CREATE FUNCTION SEC_TO_INT(interval)
232 RETURNS double precision AS $$
233     select extract(epoch from $1);
234 $$ LANGUAGE SQL;
235
236 CREATE OR REPLACE FUNCTION base64_decode_lstat(int4, varchar) RETURNS int8 AS $$
237 DECLARE
238 val int8;
239 b64 varchar(64);
240 size varchar(64);
241 i int;
242 BEGIN
243 size := split_part($2, ' ', $1);
244 b64 := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
245 val := 0;
246 FOR i IN 1..length(size) LOOP
247 val := val + (strpos(b64, substr(size, i, 1))-1) * (64^(length(size)-i));
248 END LOOP;
249 RETURN val;
250 END;
251 $$ language 'plpgsql';
252
253 COMMIT;
254
255