QGIS API Documentation 3.43.0-Master (32433f7016e)
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#include "moc_qgsserversettings.cpp"
21#include "qgsapplication.h"
22#include "qgsvariantutils.h"
23
24#include <QSettings>
25#include <QDir>
26
31
32void QgsServerSettings::initSettings()
33{
34 mSettings.clear();
35
36 // options path
37 const Setting sOptPath = { QgsServerSettingsEnv::QGIS_OPTIONS_PATH, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Override the default path for user configuration" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
38 mSettings[sOptPath.envVar] = sOptPath;
39
40 // parallel rendering
41 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() };
42 mSettings[sParRend.envVar] = sParRend;
43
44 // max threads
45 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() };
46 mSettings[sMaxThreads.envVar] = sMaxThreads;
47
48 // log level
49 const Setting sLogLevel = { QgsServerSettingsEnv::QGIS_SERVER_LOG_LEVEL, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Log level" ), QString(), QMetaType::Type::Int, QVariant::fromValue( Qgis::MessageLevel::NoLevel ), QVariant() };
50 mSettings[sLogLevel.envVar] = sLogLevel;
51
52 // log file
53 const Setting sLogFile = { QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Log file" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
54 mSettings[sLogFile.envVar] = sLogFile;
55
56 // log to stderr
57 const Setting sLogStderr = { QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Activate/Deactivate logging to stderr" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
58 mSettings[sLogStderr.envVar] = sLogStderr;
59
60 // project file
61 const Setting sProject = { QgsServerSettingsEnv::QGIS_PROJECT_FILE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "QGIS project file" ), QString(), QMetaType::Type::QString, QVariant( "" ), QVariant() };
62 mSettings[sProject.envVar] = sProject;
63
64 // cache directory
65 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() };
66 mSettings[sCacheDir.envVar] = sCacheDir;
67
68 // cache size
69 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() };
70 mSettings[sCacheSize.envVar] = sCacheSize;
71
72 // system locale override
73 const Setting sOverrideSystemLocale = { QgsServerSettingsEnv::QGIS_SERVER_OVERRIDE_SYSTEM_LOCALE, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Override system locale" ), QStringLiteral( "/locale/userLocale" ), QMetaType::Type::QString, QVariant( "" ), QVariant() };
74 mSettings[sOverrideSystemLocale.envVar] = sOverrideSystemLocale;
75
76 // bad layers handling
77 const Setting sIgnoreBadLayers = { QgsServerSettingsEnv::QGIS_SERVER_IGNORE_BAD_LAYERS, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Ignore bad layers" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
78 mSettings[sIgnoreBadLayers.envVar] = sIgnoreBadLayers;
79
80 // trust layer metadata
81 const Setting sTrustLayerMetadata = { QgsServerSettingsEnv::QGIS_SERVER_TRUST_LAYER_METADATA, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Trust layer metadata" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
82 mSettings[sTrustLayerMetadata.envVar] = sTrustLayerMetadata;
83
84
85 // force to open layers in read-only mode
86 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() };
87 mSettings[sForceReadOnlyLayers.envVar] = sForceReadOnlyLayers;
88
89 // don't load layouts
90 const Setting sDontLoadLayouts = { QgsServerSettingsEnv::QGIS_SERVER_DISABLE_GETPRINT, QgsServerSettingsEnv::DEFAULT_VALUE, QStringLiteral( "Don't load layouts" ), QString(), QMetaType::Type::Bool, QVariant( false ), QVariant() };
91 mSettings[sDontLoadLayouts.envVar] = sDontLoadLayouts;
92
93 // show group separator
94 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() };
95 mSettings[sShowGroupSeparator.envVar] = sShowGroupSeparator;
96
97 // max height
98 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() };
99 mSettings[sMaxHeight.envVar] = sMaxHeight;
100
101 // max width
102 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() };
103 mSettings[sMaxWidth.envVar] = sMaxWidth;
104
105 // API templates and static override directory
106 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() };
107
108 mSettings[sApiResourcesDirectory.envVar] = sApiResourcesDirectory;
109
110 // API WFS3 max limit
111 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() };
112
113 mSettings[sApiWfs3MaxLimit.envVar] = sApiWfs3MaxLimit;
114
115 // projects directory for landing page service
116 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() };
117
118 mSettings[sProjectsDirectories.envVar] = sProjectsDirectories;
119
120 // postgresql connection string for landing page service
121 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() };
122
123 mSettings[sProjectsPgConnections.envVar] = sProjectsPgConnections;
124
125 // landing page base URL prefix
126 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() };
127
128 mSettings[sLandingPageBaseUrlPrefix.envVar] = sLandingPageBaseUrlPrefix;
129
130 // log profile
131 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() };
132
133 mSettings[sLogProfile.envVar] = sLogProfile;
134
135 // the default service URL.
136 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() };
137 mSettings[sServiceUrl.envVar] = sServiceUrl;
138
139 // the default WMS service URL.
140 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() };
141 mSettings[sServiceUrl.envVar] = sWmsServiceUrl;
142
143 // the default WFS service URL.
144 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() };
145 mSettings[sServiceUrl.envVar] = sWfsServiceUrl;
146
147 // the default WCS service URL.
148 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() };
149 mSettings[sServiceUrl.envVar] = sWfsServiceUrl;
150
151 // the default WMTS service URL.
152 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() };
153 mSettings[sServiceUrl.envVar] = sWmtsServiceUrl;
154
155 // the default config cache check interval
156 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() };
157 mSettings[sConfigCacheCheckInterval.envVar] = sConfigCacheCheckInterval;
158
159 // the default config cache strategy
160 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() };
161 mSettings[sProjectCacheStrategy.envVar] = sProjectCacheStrategy;
162
163 // the default config cache size
164 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() };
165 mSettings[sProjectCacheSize.envVar] = sProjectCacheSize;
166
167 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() };
168 mSettings[sAllowedExtraSqlTokens.envVar] = sAllowedExtraSqlTokens;
169
170 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() };
171 mSettings[sApplicationName.envVar] = sApplicationName;
172
173 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() };
174 mSettings[sCapabilitiesCacheSize.envVar] = sCapabilitiesCacheSize;
175}
176
178{
179 // init settings each time to take into account QgsApplication and
180 // QCoreApplication configuration for some default values
181 initSettings();
182
183 // store environment variables
184 QMap<QgsServerSettingsEnv::EnvVar, QString> env = getEnv();
185
186 // load QSettings if QGIS_OPTIONS_PATH is defined
187 loadQSettings( env[QgsServerSettingsEnv::QGIS_OPTIONS_PATH] );
188
189 // prioritize values: 'env var' -> 'ini file' -> 'default value'
190 prioritize( env );
191}
192
193bool QgsServerSettings::load( const QString &envVarName )
194{
195 bool rc( false );
196 const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
197 const int value = metaEnum.keyToValue( envVarName.toStdString().c_str() );
198
199 if ( value >= 0 )
200 {
201 const QString envValue( getenv( envVarName.toStdString().c_str() ) );
202 prioritize( QMap<QgsServerSettingsEnv::EnvVar, QString> { { ( QgsServerSettingsEnv::EnvVar ) value, envValue } } );
203 rc = true;
204 }
205
206 return rc;
207}
208
209QMap<QgsServerSettingsEnv::EnvVar, QString> QgsServerSettings::getEnv() const
210{
211 QMap<QgsServerSettingsEnv::EnvVar, QString> env;
212
213 const QMetaEnum metaEnum( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
214 for ( int i = 0; i < metaEnum.keyCount(); i++ )
215 {
216 env[( QgsServerSettingsEnv::EnvVar ) metaEnum.value( i )] = getenv( metaEnum.key( i ) );
217 }
218
219 return env;
220}
221
222QVariant QgsServerSettings::value( QgsServerSettingsEnv::EnvVar envVar, bool actual ) const
223{
224 if ( actual )
225 {
226 const QString envValue( getenv( name( envVar ).toStdString().c_str() ) );
227
228 if ( !envValue.isEmpty() )
229 return envValue;
230 }
231
232 if ( mSettings[envVar].src == QgsServerSettingsEnv::DEFAULT_VALUE )
233 {
234 return mSettings[envVar].defaultVal;
235 }
236 else
237 {
238 return mSettings[envVar].val;
239 }
240}
241
242void QgsServerSettings::loadQSettings( const QString &envOptPath ) const
243{
244 if ( !envOptPath.isEmpty() )
245 {
246 QSettings::setDefaultFormat( QSettings::IniFormat );
247 QSettings::setPath( QSettings::IniFormat, QSettings::UserScope, envOptPath );
248 }
249}
250
251void QgsServerSettings::prioritize( const QMap<QgsServerSettingsEnv::EnvVar, QString> &env )
252{
253 const auto constKeys( env.keys() );
254 for ( const QgsServerSettingsEnv::EnvVar &e : constKeys )
255 {
256 Setting s = mSettings[e];
257
258 QVariant varValue;
259 if ( !env.value( e ).isEmpty() )
260 {
261 varValue.setValue( env.value( e ) );
262 }
263
264 if ( !QgsVariantUtils::isNull( varValue ) && varValue.canConvert( s.type ) )
265 {
266 s.val = varValue;
268 }
269 else if ( !s.iniKey.isEmpty() && QSettings().contains( s.iniKey ) && QSettings().value( s.iniKey ).canConvert( s.type ) )
270 {
271 s.val = QSettings().value( s.iniKey );
273 }
274 else
275 {
276 s.val = QVariant();
278 }
279
280 // an empty string can be returned from QSettings. In this case, we want
281 // to use the default value
282 if ( s.type == QMetaType::Type::QString && s.val.toString().isEmpty() )
283 {
284 s.val = QVariant();
286 }
287
288 mSettings[e] = s;
289 }
290}
291
293{
294 const QMetaEnum metaEnumEnv( QMetaEnum::fromType<QgsServerSettingsEnv::EnvVar>() );
295 return metaEnumEnv.valueToKey( env );
296}
297
299{
300 const QMetaEnum metaEnumSrc( QMetaEnum::fromType<QgsServerSettingsEnv::Source>() );
301
302 QgsMessageLog::logMessage( "QGIS Server Settings: ", "Server", Qgis::MessageLevel::Info );
303 for ( const Setting &s : std::as_const( mSettings ) )
304 {
305 const QString src = metaEnumSrc.valueToKey( s.src );
306 const QString var = name( s.envVar );
307
308 const QString msg = " - " + var + " / '" + s.iniKey + "' (" + s.descr + "): '" + value( s.envVar ).toString() + "' (read from " + src + ")";
310 }
311
312 if ( !iniFile().isEmpty() )
313 {
314 const QString msg = "Ini file used to initialize settings: " + iniFile();
316 }
317}
318
319// getter
321{
322 return QSettings().fileName();
323}
324
329
331{
332 return value( QgsServerSettingsEnv::QGIS_SERVER_MAX_THREADS ).toInt();
333}
334
336{
337 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_FILE ).toString();
338}
339
341{
342 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_STDERR ).toBool();
343}
344
349
351{
352 return value( QgsServerSettingsEnv::QGIS_PROJECT_FILE ).toString();
353}
354
356{
357 return value( QgsServerSettingsEnv::QGIS_SERVER_CACHE_SIZE ).toLongLong();
358}
359
361{
362 return value( QgsServerSettingsEnv::QGIS_SERVER_CACHE_DIRECTORY ).toString();
363}
364
369
374
379
384
389
394
399
404
406{
407 return value( QgsServerSettingsEnv::QGIS_SERVER_API_WFS3_MAX_LIMIT ).toLongLong();
408}
409
414
419
424
429
431{
432 return value( QgsServerSettingsEnv::QGIS_SERVER_LOG_PROFILE, false ).toBool();
433}
434
435QString QgsServerSettings::serviceUrl( const QString &service ) const
436{
437 QString result;
438 if ( service.compare( QLatin1String( "WMS" ) ) )
439 {
440 result = value( QgsServerSettingsEnv::QGIS_SERVER_WMS_SERVICE_URL ).toString();
441 }
442 else if ( service.compare( QLatin1String( "WFS" ) ) )
443 {
444 result = value( QgsServerSettingsEnv::QGIS_SERVER_WFS_SERVICE_URL ).toString();
445 }
446 else if ( service.compare( QLatin1String( "WCS" ) ) )
447 {
448 result = value( QgsServerSettingsEnv::QGIS_SERVER_WCS_SERVICE_URL ).toString();
449 }
450 else if ( service.compare( QLatin1String( "WMTS" ) ) )
451 {
452 result = value( QgsServerSettingsEnv::QGIS_SERVER_WMTS_SERVICE_URL ).toString();
453 }
454
455 if ( result.isEmpty() )
456 {
457 result = value( QgsServerSettingsEnv::QGIS_SERVER_SERVICE_URL ).toString();
458 }
459
460 return result;
461}
462
467
469{
470 QString result = value( QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_STRATEGY ).toString();
471 if ( result.compare( QLatin1String( "filesystem" ) ) && result.compare( QLatin1String( "periodic" ) ) && result.compare( QLatin1String( "off" ) ) )
472 {
473 QgsMessageLog::logMessage( QStringLiteral( "Invalid cache strategy, expecting 'filesystem', 'periodic' or 'off'. Using 'filesystem' as default." ), "Server", Qgis::MessageLevel::Warning );
474 result = QStringLiteral( "filesystem" );
475 }
476 return result;
477}
478
480{
481 bool ok;
482 int size = value( QgsServerSettingsEnv::QGIS_SERVER_PROJECT_CACHE_SIZE ).toInt( &ok );
483 if ( ok && size >= 1 )
484 return size;
485
486 QgsMessageLog::logMessage( QStringLiteral( "Invalid project cache size, expecting integer - defaulting to 100" ), "Server", Qgis::MessageLevel::Warning );
487 return 100;
488}
489
491{
492 const QString strVal { value( QgsServerSettingsEnv::QGIS_SERVER_ALLOWED_EXTRA_SQL_TOKENS ).toString().trimmed() };
493 if ( strVal.isEmpty() )
494 {
495 return QStringList();
496 }
497 return strVal.split( ',' );
498}
499
501{
502 return value( QgsServerSettingsEnv::QGIS_SERVER_APPLICATION_NAME ).toString().trimmed();
503}
504
506{
507 bool ok;
508 int size = value( QgsServerSettingsEnv::QGIS_SERVER_CAPABILITIES_CACHE_SIZE ).toInt( &ok );
509 if ( ok && size >= 1 )
510 return size;
511
512 QgsMessageLog::logMessage( QStringLiteral( "Invalid capabilities cache size, expecting integer - defaulting to 40" ), "Server", Qgis::MessageLevel::Warning );
513 return 40;
514}
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:154
@ NoLevel
No level.
Definition qgis.h:159
@ Warning
Warning message.
Definition qgis.h:156
@ Info
Information message.
Definition qgis.h:155
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_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_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_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 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 logFile() const
Returns the log file.
qlonglong apiWfs3MaxLimit() const
Returns the server-wide maximum allowed value for "limit" in a features request.
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.