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