QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsserversettings.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsserversettings.cpp
3 ---------------------
4 begin : December 19, 2016
5 copyright : (C) 2016 by Paul Blottiere
6 email : paul dot blottiere at oslandia dot com
7
8***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#include "qgsserversettings.h"
20
21#include "qgsapplication.h"
22#include "qgsvariantutils.h"
23
24#include <QDir>
25#include <QSettings>
26
27#include "moc_qgsserversettings.cpp"
28
33
34void QgsServerSettings::initSettings()
35{
36 mSettings.clear();
37
38 // options path
39 const Setting sOptPath = { QgsServerSettingsEnv::QGIS_OPTIONS_PATH, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Override the default path for user configuration" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
40 mSettings[sOptPath.envVar] = sOptPath;
41
42 // parallel rendering
43 const Setting sParRend = { QgsServerSettingsEnv::QGIS_SERVER_PARALLEL_RENDERING, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Activate/Deactivate parallel rendering for WMS getMap request" ), QStringLiteral( "/qgis/parallel_rendering" ), QMetaType::Type::Bool, QVariant( false ), QVariant() };
44 mSettings[sParRend.envVar] = sParRend;
45
46 // max threads
47 const Setting sMaxThreads = { QgsServerSettingsEnv::QGIS_SERVER_MAX_THREADS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Number of threads to use when parallel rendering is activated" ), QStringLiteral( "/qgis/max_threads" ), QMetaType::Type::Int, QVariant( -1 ), QVariant() };
48 mSettings[sMaxThreads.envVar] = sMaxThreads;
49
50 // log level
51 const Setting sLogLevel = { QgsServerSettingsEnv::QGIS_SERVER_LOG_LEVEL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Log level" ), QString(), QMetaType::Type::Int, QVariant::fromValue( Qgis::MessageLevel::NoLevel ), QVariant() };
52 mSettings[sLogLevel.envVar] = sLogLevel;
53
54 // log file
55 const Setting sLogFile = { QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Log file" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
56 mSettings[sLogFile.envVar] = sLogFile;
57
58 // log to stderr
59 const Setting sLogStderr = { QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Activate/Deactivate logging to stderr" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
60 mSettings[sLogStderr.envVar] = sLogStderr;
61
62 // project file
63 const Setting sProject = { QgsServerSettingsEnv::QGIS_PROJECT_FILE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "QGIS project file" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
64 mSettings[sProject.envVar] = sProject;
65
66 // cache directory
67 const Setting sCacheDir = { QgsServerSettingsEnv::QGIS_SERVER_CACHE_DIRECTORY, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Specify the cache directory" ), QStringLiteral( "/cache/directory" ), QMetaType::Type::QString, QVariant( QgsApplication::qgisSettingsDirPath() + "cache" ), QVariant() };
68 mSettings[sCacheDir.envVar] = sCacheDir;
69
70 // cache size
71 const Setting sCacheSize = { QgsServerSettingsEnv::QGIS_SERVER_CACHE_SIZE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Specify the cache size (0 = automatic size)" ), QStringLiteral( "/cache/size-bytes" ), QMetaType::Type::LongLong, 0, QVariant() };
72 mSettings[sCacheSize.envVar] = sCacheSize;
73
74 // system locale override
75 const Setting sOverrideSystemLocale = { QgsServerSettingsEnv::QGIS_SERVER_OVERRIDE_SYSTEM_LOCALE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Override system locale" ), QStringLiteral( "/locale/userLocale" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
76 mSettings[sOverrideSystemLocale.envVar] = sOverrideSystemLocale;
77
78 // bad layers handling
79 const Setting sIgnoreBadLayers = { QgsServerSettingsEnv::QGIS_SERVER_IGNORE_BAD_LAYERS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Ignore bad layers" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
80 mSettings[sIgnoreBadLayers.envVar] = sIgnoreBadLayers;
81
82 const Setting sIgnoreRenderingErrors = { QgsServerSettingsEnv::QGIS_SERVER_IGNORE_RENDERING_ERRORS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Ignore rendering errors" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
83 mSettings[sIgnoreRenderingErrors.envVar] = sIgnoreRenderingErrors;
84
85 // retry bad layers
86 const Setting sRetryBadLayers = { QgsServerSettingsEnv::QGIS_SERVER_RETRY_BAD_LAYERS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Retry bad layers" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
87 mSettings[sRetryBadLayers.envVar] = sRetryBadLayers;
88
89 // trust layer metadata
90 const Setting sTrustLayerMetadata = { QgsServerSettingsEnv::QGIS_SERVER_TRUST_LAYER_METADATA, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Trust layer metadata" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
91 mSettings[sTrustLayerMetadata.envVar] = sTrustLayerMetadata;
92
93
94 // force to open layers in read-only mode
95 const Setting sForceReadOnlyLayers = { QgsServerSettingsEnv::QGIS_SERVER_FORCE_READONLY_LAYERS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Force to open layers in read-only mode" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
96 mSettings[sForceReadOnlyLayers.envVar] = sForceReadOnlyLayers;
97
98 // don't load layouts
99 const Setting sDontLoadLayouts = { QgsServerSettingsEnv::QGIS_SERVER_DISABLE_GETPRINT, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Don't load layouts" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
100 mSettings[sDontLoadLayouts.envVar] = sDontLoadLayouts;
101
102 // show group separator
103 const Setting sShowGroupSeparator = { QgsServerSettingsEnv::QGIS_SERVER_SHOW_GROUP_SEPARATOR, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Show group (thousands) separator" ), QStringLiteral( "/locale/showGroupSeparator" ), QMetaType::Type::QString, QVariant( false ), QVariant() };
104 mSettings[sShowGroupSeparator.envVar] = sShowGroupSeparator;
105
106 // max height
107 const Setting sMaxHeight = { QgsServerSettingsEnv::QGIS_SERVER_WMS_MAX_HEIGHT, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Maximum height for a WMS request. The lower one of this and the project configuration is used." ), QStringLiteral( "/qgis/max_wms_height" ), QMetaType::Type::LongLong, QVariant( -1 ), QVariant() };
108 mSettings[sMaxHeight.envVar] = sMaxHeight;
109
110 // max width
111 const Setting sMaxWidth = { QgsServerSettingsEnv::QGIS_SERVER_WMS_MAX_WIDTH, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Maximum width for a WMS request. The most conservative between this and the project one is used" ), QStringLiteral( "/qgis/max_wms_width" ), QMetaType::Type::LongLong, QVariant( -1 ), QVariant() };
112 mSettings[sMaxWidth.envVar] = sMaxWidth;
113
114 // API templates and static override directory
115 const Setting sApiResourcesDirectory = { QgsServerSettingsEnv::QGIS_SERVER_API_RESOURCES_DIRECTORY, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Base directory where HTML templates and static assets (e.g. images, js and css files) are searched for" ), QStringLiteral( "/qgis/server_api_resources_directory" ), QMetaType::Type::QString, QDir( QgsApplication::pkgDataPath() ).absoluteFilePath( QStringLiteral( "resources/server/api" ) ), QString() };
116
117 mSettings[sApiResourcesDirectory.envVar] = sApiResourcesDirectory;
118
119 // API WFS3 max limit
120 const Setting sApiWfs3MaxLimit = { QgsServerSettingsEnv::QGIS_SERVER_API_WFS3_MAX_LIMIT, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Maximum value for \"limit\" in a features request, defaults to 10000" ), QStringLiteral( "/qgis/server_api_wfs3_max_limit" ), QMetaType::Type::LongLong, QVariant( 10000 ), QVariant() };
121
122 mSettings[sApiWfs3MaxLimit.envVar] = sApiWfs3MaxLimit;
123
124 // API WFS3 root path
125 // TODO: remove when QGIS 4 is released
126#if _QGIS_VERSION_INT > 40000
127 const Setting sApiWfs3RootPath = { QgsServerSettingsEnv::QGIS_SERVER_API_WFS3_ROOT_PATH, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Root path for the OAPIF (WFS3) API" ), QStringLiteral( "/qgis/server_api_wfs3_root_path" ), QMetaType::Type::QString, QVariant( "/ogcapi" ), QVariant() };
128#else
129 const Setting sApiWfs3RootPath = { QgsServerSettingsEnv::QGIS_SERVER_API_WFS3_ROOT_PATH, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Root path for the OAPIF (WFS3) API" ), QStringLiteral( "/qgis/server_api_wfs3_root_path" ), QMetaType::Type::QString, QVariant( "/wfs3" ), QVariant() };
130#endif
131
132 mSettings[sApiWfs3RootPath.envVar] = sApiWfs3RootPath;
133
134 // projects directory for landing page service
135 const Setting sProjectsDirectories = { QgsServerSettingsEnv::QGIS_SERVER_LANDING_PAGE_PROJECTS_DIRECTORIES, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Directories used by the landing page service to find .qgs and .qgz projects" ), QStringLiteral( "/qgis/server_projects_directories" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
136
137 mSettings[sProjectsDirectories.envVar] = sProjectsDirectories;
138
139 // postgresql connection string for landing page service
140 const Setting sProjectsPgConnections = { QgsServerSettingsEnv::QGIS_SERVER_LANDING_PAGE_PROJECTS_PG_CONNECTIONS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "PostgreSQL connection strings used by the landing page service to find projects" ), QStringLiteral( "/qgis/server_projects_pg_connections" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
141
142 mSettings[sProjectsPgConnections.envVar] = sProjectsPgConnections;
143
144 // landing page base URL prefix
145 const Setting sLandingPageBaseUrlPrefix = { QgsServerSettingsEnv::QGIS_SERVER_LANDING_PAGE_PREFIX, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Landing page base URL path prefix" ), QStringLiteral( "/qgis/server_landing_page_base_url_prefix" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
146
147 mSettings[sLandingPageBaseUrlPrefix.envVar] = sLandingPageBaseUrlPrefix;
148
149 // log profile
150 const Setting sLogProfile = { QgsServerSettingsEnv::QGIS_SERVER_LOG_PROFILE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Add detailed profile information to the logs, only effective when QGIS_SERVER_LOG_LEVEL=0" ), QStringLiteral( "/qgis/server_log_profile" ), QMetaType::Type::Bool, QVariant( false ), QVariant() };
151
152 mSettings[sLogProfile.envVar] = sLogProfile;
153
154 // the default service URL.
155 const Setting sServiceUrl = { QgsServerSettingsEnv::QGIS_SERVER_SERVICE_URL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default service URL" ), QStringLiteral( "/qgis/server_service_url" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
156 mSettings[sServiceUrl.envVar] = sServiceUrl;
157
158 // the default WMS service URL.
159 const Setting sWmsServiceUrl = { QgsServerSettingsEnv::QGIS_SERVER_WMS_SERVICE_URL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default WMS service URL" ), QStringLiteral( "/qgis/server_wms_service_url" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
160 mSettings[sServiceUrl.envVar] = sWmsServiceUrl;
161
162 // the default WFS service URL.
163 const Setting sWfsServiceUrl = { QgsServerSettingsEnv::QGIS_SERVER_WFS_SERVICE_URL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default WFS service URL" ), QStringLiteral( "/qgis/server_wfs_service_url" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
164 mSettings[sServiceUrl.envVar] = sWfsServiceUrl;
165
166 // the default WCS service URL.
167 const Setting sWcsServiceUrl = { QgsServerSettingsEnv::QGIS_SERVER_WCS_SERVICE_URL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default WcS service URL" ), QStringLiteral( "/qgis/server_wcs_service_url" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
168 mSettings[sServiceUrl.envVar] = sWfsServiceUrl;
169
170 // the default WMTS service URL.
171 const Setting sWmtsServiceUrl = { QgsServerSettingsEnv::QGIS_SERVER_WMTS_SERVICE_URL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default WMTS service URL" ), QStringLiteral( "/qgis/server_wmts_service_url" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
172 mSettings[sServiceUrl.envVar] = sWmtsServiceUrl;
173
174 // the default config cache check interval
175 const Setting sConfigCacheCheckInterval = { QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_CHECK_INTERVAL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The default project cache check interval (in ms)" ), QStringLiteral( "/qgis/server_project_cache_check_interval" ), QMetaType::Type::Int, QVariant( 0 ), QVariant() };
176 mSettings[sConfigCacheCheckInterval.envVar] = sConfigCacheCheckInterval;
177
178 // the default config cache strategy
179 const Setting sProjectCacheStrategy = { QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_STRATEGY, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Project's cache strategy. Possible values are 'off','filesystem' or 'periodic'" ), QStringLiteral( "/qgis/server_project_cache_strategy" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
180 mSettings[sProjectCacheStrategy.envVar] = sProjectCacheStrategy;
181
182 // the default config cache size
183 const Setting sProjectCacheSize = { QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_SIZE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Project's cache size, in number of projects." ), QStringLiteral( "/qgis/server_project_cache_size" ), QMetaType::Type::QString, QVariant( 100 ), QVariant() };
184 mSettings[sProjectCacheSize.envVar] = sProjectCacheSize;
185
186 const Setting sAllowedExtraSqlTokens = { QgsServerSettingsEnv::QGIS_SERVER_ALLOWED_EXTRA_SQL_TOKENS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "List of comma separated SQL tokens to be added to the list of allowed tokens that the services accepts when filtering features" ), QStringLiteral( "/qgis/server_allowed_extra_sql_tokens" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
187 mSettings[sAllowedExtraSqlTokens.envVar] = sAllowedExtraSqlTokens;
188
189 const Setting sApplicationName = { QgsServerSettingsEnv::QGIS_SERVER_APPLICATION_NAME, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The QGIS Server application name" ), QStringLiteral( "/qgis/application_full_name" ), QMetaType::Type::QString, QVariant( QgsApplication::applicationFullName() ), QVariant() };
190 mSettings[sApplicationName.envVar] = sApplicationName;
191
192 const Setting sCapabilitiesCacheSize = { QgsServerSettingsEnv::QGIS_SERVER_CAPABILITIES_CACHE_SIZE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "The QGIS Server capabilities cache size" ), QStringLiteral( "/qgis/capabilities_cache_size" ), QMetaType::Type::Int, QVariant( 40 ), QVariant() };
193 mSettings[sCapabilitiesCacheSize.envVar] = sCapabilitiesCacheSize;
194}
195
197{
198 // init settings each time to take into account QgsApplication and
199 // QCoreApplication configuration for some default values
200 initSettings();
201
202 // store environment variables
203 QMap<QgsServerSettingsEnv::EnvVar, QString> env = getEnv();
204
205 // load QSettings if QGIS_OPTIONS_PATH is defined
206 loadQSettings( env[QgsServerSettingsEnv::QGIS_OPTIONS_PATH] );
207
208 // prioritize values: 'env var' -> 'ini file' -> 'default value'
209 prioritize( env );
210}
211
212bool QgsServerSettings::load( const QString &envVarName )
213{
214 bool rc( false );
215 const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
216 const int value = metaEnum.keyToValue( envVarName.toStdString().c_str() );
217
218 if ( value >= 0 )
219 {
220 const QString envValue( getenv( envVarName.toStdString().c_str() ) );
221 prioritize( QMap<QgsServerSettingsEnv::EnvVar, QString> { { ( QgsServerSettingsEnv::EnvVar ) value, envValue } } );
222 rc = true;
223 }
224
225 return rc;
226}
227
228QMap<QgsServerSettingsEnv::EnvVar, QString> QgsServerSettings::getEnv() const
229{
230 QMap<QgsServerSettingsEnv::EnvVar, QString> env;
231
232 const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
233 for ( int i = 0; i < metaEnum.keyCount(); i++ )
234 {
235 env[( QgsServerSettingsEnv::EnvVar ) metaEnum.value( i )] = getenv( metaEnum.key( i ) );
236 }
237
238 return env;
239}
240
241QVariant QgsServerSettings::value( QgsServerSettingsEnv::EnvVar envVar, bool actual ) const
242{
243 if ( actual )
244 {
245 const QString envValue( getenv( name( envVar ).toStdString().c_str() ) );
246
247 if ( !envValue.isEmpty() )
248 return envValue;
249 }
250
251 if ( mSettings[envVar].src == QgsServerSettingsEnv::DEFAULT_VALUE )
252 {
253 return mSettings[envVar].defaultVal;
254 }
255 else
256 {
257 return mSettings[envVar].val;
258 }
259}
260
261void QgsServerSettings::loadQSettings( const QString &envOptPath ) const
262{
263 if ( !envOptPath.isEmpty() )
264 {
265 QSettings::setDefaultFormat( QSettings::IniFormat );
266 QSettings::setPath( QSettings::IniFormat, QSettings::UserScope, envOptPath );
267 }
268}
269
270void QgsServerSettings::prioritize( const QMap<QgsServerSettingsEnv::EnvVar, QString> &env )
271{
272 const auto constKeys( env.keys() );
273 for ( const QgsServerSettingsEnv::EnvVar &e : constKeys )
274 {
275 Setting s = mSettings[e];
276
277 QVariant varValue;
278 if ( !env.value( e ).isEmpty() )
279 {
280 varValue.setValue( env.value( e ) );
281 }
282
283 if ( !QgsVariantUtils::isNull( varValue ) && varValue.canConvert( s.type ) )
284 {
285 s.val = varValue;
287 }
288 else if ( !s.iniKey.isEmpty() && QSettings().contains( s.iniKey ) && QSettings().value( s.iniKey ).canConvert( s.type ) )
289 {
290 s.val = QSettings().value( s.iniKey );
292 }
293 else
294 {
295 s.val = QVariant();
297 }
298
299 // an empty string can be returned from QSettings. In this case, we want
300 // to use the default value
301 if ( s.type == QMetaType::Type::QString && s.val.toString().isEmpty() )
302 {
303 s.val = QVariant();
305 }
306
307 mSettings[e] = s;
308 }
309}
310
312{
313 const QMetaEnum metaEnumEnv( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
314 return metaEnumEnv.valueToKey( env );
315}
316
318{
319 const QMetaEnum metaEnumSrc( QMetaEnum::fromType<QgsServerSettingsEnv::Source>() );
320
321 QgsMessageLog::logMessage( "QGIS Server Settings: ", "Server", Qgis::MessageLevel::Info );
322 for ( const Setting &s : std::as_const( mSettings ) )
323 {
324 const QString src = metaEnumSrc.valueToKey( s.src );
325 const QString var = name( s.envVar );
326
327 const QString msg = " - " + var + " / '" + s.iniKey + "' (" + s.descr + "): '" + value( s.envVar ).toString() + "' (read from " + src + ")";
329 }
330
331 if ( !iniFile().isEmpty() )
332 {
333 const QString msg = "Ini file used to initialize settings: " + iniFile();
335 }
336}
337
338// getter
340{
341 return QSettings().fileName();
342}
343
348
350{
351 return value( QgsServerSettingsEnv::QGIS_SERVER_MAX_THREADS ).toInt();
352}
353
355{
356 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE ).toString();
357}
358
360{
361 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR ).toBool();
362}
363
368
370{
371 return value( QgsServerSettingsEnv::QGIS_PROJECT_FILE ).toString();
372}
373
375{
376 return value( QgsServerSettingsEnv::QGIS_SERVER_CACHE_SIZE ).toLongLong();
377}
378
380{
381 return value( QgsServerSettingsEnv::QGIS_SERVER_CACHE_DIRECTORY ).toString();
382}
383
388
393
398
403
408
413
418
423
425{
426 return value( QgsServerSettingsEnv::QGIS_SERVER_API_WFS3_MAX_LIMIT ).toLongLong();
427}
428
430{
432}
433
438
443
448
453
458
463
465{
466 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_PROFILE, false ).toBool();
467}
468
469QString QgsServerSettings::serviceUrl( const QString &service ) const
470{
471 QString result;
472 if ( service.compare( QLatin1String( "WMS" ) ) )
473 {
474 result = value( QgsServerSettingsEnv::QGIS_SERVER_WMS_SERVICE_URL ).toString();
475 }
476 else if ( service.compare( QLatin1String( "WFS" ) ) )
477 {
478 result = value( QgsServerSettingsEnv::QGIS_SERVER_WFS_SERVICE_URL ).toString();
479 }
480 else if ( service.compare( QLatin1String( "WCS" ) ) )
481 {
482 result = value( QgsServerSettingsEnv::QGIS_SERVER_WCS_SERVICE_URL ).toString();
483 }
484 else if ( service.compare( QLatin1String( "WMTS" ) ) )
485 {
486 result = value( QgsServerSettingsEnv::QGIS_SERVER_WMTS_SERVICE_URL ).toString();
487 }
488
489 if ( result.isEmpty() )
490 {
491 result = value( QgsServerSettingsEnv::QGIS_SERVER_SERVICE_URL ).toString();
492 }
493
494 return result;
495}
496
501
503{
504 QString result = value( QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_STRATEGY ).toString();
505 if ( result.compare( QLatin1String( "filesystem" ) ) && result.compare( QLatin1String( "periodic" ) ) && result.compare( QLatin1String( "off" ) ) )
506 {
507 if ( !result.isEmpty() )
508 {
509 QgsMessageLog::logMessage( QStringLiteral( "Invalid cache strategy '%1', expecting 'filesystem', 'periodic' or 'off'. Using 'filesystem' as default." ).arg( result ), "Server", Qgis::MessageLevel::Warning );
510 }
511 else
512 {
513 QgsMessageLog::logMessage( QStringLiteral( "No cache strategy was specified. Using 'filesystem' as default." ), "Server", Qgis::MessageLevel::Info );
514 }
515 result = QStringLiteral( "filesystem" );
516 }
517 return result;
518}
519
521{
522 bool ok;
523 int size = value( QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_SIZE ).toInt( &ok );
524 if ( ok && size >= 1 )
525 return size;
526
527 QgsMessageLog::logMessage( QStringLiteral( "Invalid project cache size, expecting integer - defaulting to 100" ), "Server", Qgis::MessageLevel::Warning );
528 return 100;
529}
530
532{
533 const QString strVal { value( QgsServerSettingsEnv::QGIS_SERVER_ALLOWED_EXTRA_SQL_TOKENS ).toString().trimmed() };
534 if ( strVal.isEmpty() )
535 {
536 return QStringList();
537 }
538 return strVal.split( ',' );
539}
540
542{
543 return value( QgsServerSettingsEnv::QGIS_SERVER_APPLICATION_NAME ).toString().trimmed();
544}
545
547{
548 bool ok;
549 int size = value( QgsServerSettingsEnv::QGIS_SERVER_CAPABILITIES_CACHE_SIZE ).toInt( &ok );
550 if ( ok && size >= 1 )
551 return size;
552
553 QgsMessageLog::logMessage( QStringLiteral( "Invalid capabilities cache size, expecting integer - defaulting to 40" ), "Server", Qgis::MessageLevel::Warning );
554 return 40;
555}
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:156
@ NoLevel
No level.
Definition qgis.h:161
@ Warning
Warning message.
Definition qgis.h:158
@ Info
Information message.
Definition qgis.h:157
static QString pkgDataPath()
Returns the common root path of all application data directories.
static QString applicationFullName()
Returns the QGIS application full name.
static QString qgisSettingsDirPath()
Returns the path to the settings directory in user's home dir.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
EnvVar
Environment variables to configure the server.
@ QGIS_SERVER_WCS_SERVICE_URL
To set the WCS service URL if it's not present in the project.
@ QGIS_SERVER_PROJECT_CACHE_SIZE
Set the project cache size, in number of projects.
@ QGIS_SERVER_WMTS_SERVICE_URL
To set the WMTS service URL if it's not present in the project.
@ QGIS_SERVER_IGNORE_BAD_LAYERS
Do not consider the whole project unavailable if it contains bad layers.
@ QGIS_SERVER_ALLOWED_EXTRA_SQL_TOKENS
Adds these tokens to the list of allowed tokens that the services accept when filtering features.
@ QGIS_SERVER_API_WFS3_ROOT_PATH
Root path for OAPIF (WFS3) service API, default value is "/wfs3".
@ QGIS_SERVER_CAPABILITIES_CACHE_SIZE
Define the QGIS Server capabilities cache size.
@ QGIS_SERVER_LANDING_PAGE_PREFIX
Prefix of the path component of the landing page base URL, default is empty.
@ QGIS_SERVER_TRUST_LAYER_METADATA
Trust layer metadata. Improves project read time.
@ QGIS_SERVER_RETRY_BAD_LAYERS
Retry bad layers in following request in case they might only be temporary unavailable.
@ QGIS_SERVER_WFS_SERVICE_URL
To set the WFS service URL if it's not present in the project.
@ QGIS_SERVER_OVERRIDE_SYSTEM_LOCALE
Override system locale.
@ QGIS_SERVER_LANDING_PAGE_PROJECTS_PG_CONNECTIONS
PostgreSQL connection strings used by the landing page service to find projects.
@ QGIS_SERVER_API_WFS3_MAX_LIMIT
Maximum value for "limit" in a features request, defaults to 10000.
@ QGIS_SERVER_API_RESOURCES_DIRECTORY
Base directory where HTML templates and static assets (e.g. images, js and css files) are searched fo...
@ QGIS_SERVER_IGNORE_RENDERING_ERRORS
Ignore rendering errors if true. If false, the server returns an error if a rendering error occurs.
@ QGIS_SERVER_WMS_MAX_WIDTH
Maximum width for a WMS request. The most conservative between this and the project one is used.
@ QGIS_SERVER_FORCE_READONLY_LAYERS
Force to open layers in read-only mode.
@ QGIS_SERVER_PROJECT_CACHE_STRATEGY
Set the project cache strategy. Possible values are 'filesystem', 'periodic' or 'off'.
@ QGIS_SERVER_APPLICATION_NAME
Define the QGIS Server application name.
@ QGIS_SERVER_WMS_MAX_HEIGHT
Maximum height for a WMS request. The most conservative between this and the project one is used.
@ QGIS_SERVER_WMS_SERVICE_URL
To set the WMS service URL if it's not present in the project.
@ QGIS_SERVER_DISABLE_GETPRINT
Disabled WMS GetPrint request and don't load layouts. Improves project read time.
@ QGIS_SERVER_PROJECT_CACHE_CHECK_INTERVAL
Set the interval in milliseconds for cache invalidation strategy 'interval', default to 0 which selec...
@ QGIS_SERVER_SHOW_GROUP_SEPARATOR
Show group (thousands) separator when formatting numeric values, defaults to false.
@ QGIS_SERVER_LANDING_PAGE_PROJECTS_DIRECTORIES
Directories used by the landing page service to find .qgs and .qgz projects.
@ QGIS_SERVER_LOG_PROFILE
When QGIS_SERVER_LOG_LEVEL is 0 this flag adds to the logs detailed information about the time taken ...
@ QGIS_SERVER_SERVICE_URL
To set the service URL if it's not present in the project.
QString serviceUrl(const QString &service) const
Returns the service URL from the setting.
QString cacheDirectory() const
Returns the cache directory.
bool getPrintDisabled() const
Returns true if WMS GetPrint request is disabled and the project's reading flag QgsProject::ReadFlag:...
int projectCacheSize() const
Returns the projects cache size The default value is 100, the value can be changed by setting the env...
QString landingPageProjectsPgConnections() const
Returns the PostgreSQL connection strings used by the landing page service to find projects.
int maxThreads() const
Returns the maximum number of threads to use.
bool logStderr() const
Returns whether logging to stderr is activated.
QgsServerSettings()
Constructor.
QString projectFile() const
Returns the QGS project file to use.
QString apiResourcesDirectory() const
Returns the server-wide base directory where HTML templates and static assets (e.g.
int projectCacheCheckInterval() const
Returns the config cache check interval (in ms) for the 'periodic' strategy.
Qgis::MessageLevel logLevel() const
Returns the log level.
bool retryBadLayers() const
Returns true if bad layers should be re-checked after the project has been cached.
bool logProfile() const
Returns true if profile information has to be added to the logs, default value is false.
QStringList allowedExtraSqlTokens() const
Returns the list of strings that represent the allowed extra SQL tokens accepted as components of a f...
bool forceReadOnlyLayers() const
Returns true if the reading flag force layer read only is activated.
int wmsMaxWidth() const
Returns the server-wide max width of a WMS GetMap request.
int capabilitiesCacheSize() const
Returns the maximum number of project capabilities to cache.
static QString name(QgsServerSettingsEnv::EnvVar env)
Returns the string representation of a setting.
QString landingPageBaseUrlPrefix() const
Returns the landing page base URL regular expression, defaults to /.
void logSummary() const
Log a summary of settings currently loaded.
QString apiWfs3RootPath() const
Returns the server-wide root path for OAPIF (WFS3) service API.
QString logFile() const
Returns the log file.
qlonglong apiWfs3MaxLimit() const
Returns the server-wide maximum allowed value for "limit" in a features request.
bool ignoreRenderingErrors() const
Returns true if rendering errors are ignored by the server.
int wmsMaxHeight() const
Returns the server-wide max height of a WMS GetMap request.
QString landingPageProjectsDirectories() const
Returns the directories used by the landing page service to find .qgs and .qgz projects.
bool parallelRendering() const
Returns parallel rendering setting.
QString applicationName() const
Returns the QGIS Server application name.
bool showGroupSeparator() const
Show group (thousand) separator.
bool ignoreBadLayers() const
Returns true if the bad layers are ignored and false when the presence of a bad layers invalidates th...
QString iniFile() const
Returns the ini file loaded by QSetting.
QString projectCacheStrategy() const
Returns the project's cache strategy The default value is 'filesystem', the value can be changed by s...
QString overrideSystemLocale() const
Overrides system locale.
bool trustLayerMetadata() const
Returns true if the reading flag trust layer metadata is activated.
void load()
Load settings according to current environment variables.
qint64 cacheSize() const
Returns the cache size.
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.