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