1010from mamonsu import __version__ as mamonsu_version
1111from mamonsu .lib .default_config import DefaultConfig
1212from mamonsu .plugins .pgsql .pool import Pooler
13- from mamonsu .tools .bootstrap .sql import CreateSchemaSQL , GrantsOnSchemaSQL , QuerySplit
13+ from mamonsu .tools .bootstrap .sql import CreateSchemaExtensionSQL , CreateSchemaDefaultSQL , \
14+ GrantsOnDefaultSchemaSQL , GrantsOnExtensionSchemaSQL , QuerySplit
1415
1516
1617class Args (DefaultConfig ):
@@ -145,6 +146,37 @@ def test_db(self, host_pre):
145146 return True
146147
147148
149+ def fill_query_params (queries ):
150+ formatted_queries = ""
151+ for sql in queries .format (
152+ mamonsu_version ,
153+ mamonsu_version .replace ('.' , '_' ),
154+ '[0-9A-F]{24}' ,
155+ 'wal' if Pooler .server_version_greater ('10.0' ) else 'xlog' ,
156+ 'wal_lsn' if Pooler .server_version_greater ('10.0' ) else 'xlog_location' ,
157+ 'waiting' if Pooler .server_version_less ('9.6.0' ) else 'case when wait_event_type is null then false '
158+ ' else true end as waiting' ,
159+ 'flush_lag, replay_lag, write_lag,' if Pooler .server_version_greater ('10.0' ) else '' ,
160+ 'wal_lsn' if Pooler .server_version_greater ('10.0' ) else 'xlog_location' ,
161+ 'flush_lag INTERVAL, replay_lag INTERVAL, write_lag INTERVAL,' if Pooler .server_version_greater ('10.0' )
162+ else '' ,
163+ 'lsn' if Pooler .server_version_greater ('10.0' ) else 'location'
164+ ).split (QuerySplit ):
165+ formatted_queries += sql
166+ return formatted_queries
167+
168+
169+ def fill_grant_params (queries , args ):
170+ formatted_grants_queries = ""
171+ for sql in queries .format (
172+ mamonsu_version .replace ('.' , '_' ),
173+ args .args .mamonsu_username ,
174+ 'wal' if Pooler .server_version_greater ('10.0' ) else 'xlog'
175+ ).split (QuerySplit ):
176+ formatted_grants_queries += sql
177+ return formatted_grants_queries
178+
179+
148180def run_deploy ():
149181 args = Args ()
150182
@@ -159,37 +191,38 @@ def run_deploy():
159191 sys .exit (1 )
160192
161193 try :
162- for sql in CreateSchemaSQL .format (
163- mamonsu_version ,
164- mamonsu_version .replace ('.' , '_' ),
165- '[0-9A-F]{24}' ,
166- 'wal' if Pooler .server_version_greater ('10.0' ) else 'xlog' ,
167- 'wal_lsn' if Pooler .server_version_greater ('10.0' ) else 'xlog_location' ,
168- 'waiting' if Pooler .server_version_less ('9.6.0' ) else 'case when wait_event_type is null then false '
169- ' else true end as waiting' ,
170- 'flush_lag, replay_lag, write_lag,' if Pooler .server_version_greater ('10.0' ) else '' ,
171- 'wal_lsn' if Pooler .server_version_greater ('10.0' ) else 'xlog_location' ,
172- 'flush_lag INTERVAL, replay_lag INTERVAL, write_lag INTERVAL,' if Pooler .server_version_greater ('10.0' )
173- else '' ,
174- 'lsn' if Pooler .server_version_greater ('10.0' ) else 'location'
175- ).split (QuerySplit ):
176- if args .args .verbose :
177- sys .stdout .write ("\n Executing query:\n {0}\n " .format (sql ))
178- Pooler .query (sql )
194+ bootstrap_queries = fill_query_params (CreateSchemaDefaultSQL )
195+ Pooler .query (bootstrap_queries )
179196 except Exception as e :
180- sys .stderr .write ("Query: \n {0}\n error: {1} \ n " .format (sql , e ))
197+ sys .stderr .write ("Bootstrap execution have exited with an error: {0}\n " .format (e ))
181198 sys .exit (2 )
199+
200+ try :
201+ bootstrap_extension_queries = fill_query_params (CreateSchemaExtensionSQL )
202+ Pooler .query (bootstrap_extension_queries )
203+ except Exception as e :
204+ sys .stderr .write (
205+ "Bootstrap failed to create the function which required pg_buffercache extension.\n "
206+ "Error: {0}\n " .format (e ))
207+ sys .stderr .write ("Please install pg_buffercache extension and rerun bootstrap "
208+ "if you want to get metrics from pg_buffercache view. \n " )
209+
182210 try :
183- for sql in GrantsOnSchemaSQL .format (
184- mamonsu_version .replace ('.' , '_' ),
185- args .args .mamonsu_username ,
186- 'wal' if Pooler .server_version_greater ('10.0' ) else 'xlog'
187- ).split (QuerySplit ):
188- if args .args .verbose :
189- sys .stdout .write ("\n Executing query:\n {0}\n " .format (sql ))
190- Pooler .query (sql )
211+ bootstrap_grant_queries = fill_grant_params (GrantsOnDefaultSchemaSQL , args )
212+ Pooler .query (bootstrap_grant_queries )
213+
191214 except Exception as e :
192- sys .stderr .write ("Query:\n {0}\n error: {1}\n " .format (sql , e ))
215+ sys .stderr .write ("Error: \n {0}\n " .format (e ))
216+ sys .stderr .write ("Please check mamonsu user permissions and rerun bootstrap.\n " )
193217 sys .exit (2 )
194218
219+ try :
220+ bootstrap_grant_extension_queries = fill_grant_params (GrantsOnExtensionSchemaSQL , args )
221+ Pooler .query (bootstrap_grant_extension_queries )
222+
223+ except Exception as e :
224+ sys .stderr .write ("Bootstrap failed to grant execution permission to "
225+ "the function which required pg_buffercache extension.\n " )
226+ sys .stderr .write ("Error: \n {0}\n " .format (e ))
227+
195228 sys .stdout .write ("Bootstrap successfully completed\n " )
0 commit comments