Skip to content

Commit ca06d40

Browse files
committed
Add custom QNetworkRequest::Attributes for initiator network request class name and internal id
And allow these to be retrieved from QgsNetworkRequestParameters. This allows logging code to identify the area of code where a request originated from, making debugging much easier! Tag all requests created with appropriate class name and IDs
1 parent a491e90 commit ca06d40

20 files changed

+121
-7
lines changed

python/core/auto_generated/qgsnetworkaccessmanager.sip.in

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111

1212

13+
1314
class QgsNetworkRequestParameters
1415
{
1516
%Docstring
@@ -23,6 +24,12 @@ Encapsulates parameters and properties of a network request.
2324
%End
2425
public:
2526

27+
enum RequestAttributes
28+
{
29+
AttributeInitiatorClass,
30+
AttributeInitiatorRequestId,
31+
};
32+
2633
QgsNetworkRequestParameters();
2734
%Docstring
2835
Default constructor.
@@ -64,6 +71,27 @@ Returns a unique ID identifying the request.
6471
%Docstring
6572
Returns the request's content. This is only used for POST or PUT operation
6673
requests.
74+
%End
75+
76+
QString initiatorClassName() const;
77+
%Docstring
78+
Returns the class name of the object which initiated this request.
79+
80+
This is only available for QNetworkRequests which have had the
81+
QgsNetworkRequestParameters.AttributeInitiatorClass attribute set.
82+
83+
.. seealso:: :py:func:`initiatorRequestId`
84+
%End
85+
86+
QVariant initiatorRequestId() const;
87+
%Docstring
88+
Returns the internal ID used by the object which initiated this request to identify
89+
individual requests.
90+
91+
This is only available for QNetworkRequests which have had the
92+
QgsNetworkRequestParameters.AttributeInitiatorRequestId attribute set.
93+
94+
.. seealso:: :py:func:`initiatorClassName`
6795
%End
6896

6997
};

python/pyplugin_installer/installer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
from qgis.PyQt.QtNetwork import QNetworkRequest
3333

3434
import qgis
35-
from qgis.core import Qgis, QgsApplication, QgsNetworkAccessManager, QgsSettings
35+
from qgis.core import Qgis, QgsApplication, QgsNetworkAccessManager, QgsSettings, QgsNetworkRequestParameters
3636
from qgis.gui import QgsMessageBar, QgsPasswordLineEdit
3737
from qgis.utils import (iface, startPlugin, unloadPlugin, loadPlugin,
3838
reloadPlugin, updateAvailablePlugins)
@@ -527,6 +527,8 @@ def sendVote(self, plugin_id, vote):
527527
url = "http://plugins.qgis.org/plugins/RPC2/"
528528
params = {"id": "djangorpc", "method": "plugin.vote", "params": [str(plugin_id), str(vote)]}
529529
req = QNetworkRequest(QUrl(url))
530+
req.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "QgsPluginInstaller")
531+
req.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorRequestId), "sendVote")
530532
req.setRawHeader(b"Content-Type", b"application/json")
531533
QgsNetworkAccessManager.instance().post(req, bytes(json.dumps(params), "utf-8"))
532534
return True

python/pyplugin_installer/installer_data.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
QLocale, QByteArray)
2929
from qgis.PyQt.QtXml import QDomDocument
3030
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
31-
from qgis.core import Qgis, QgsSettings
31+
from qgis.core import Qgis, QgsSettings, QgsNetworkRequestParameters
3232
import sys
3333
import os
3434
import codecs
@@ -322,6 +322,7 @@ def requestFetching(self, key, url=None, redirectionCounter=0):
322322
# url.addQueryItem('qgis', '.'.join([str(int(s)) for s in [v[0], v[1:3]]]) ) # don't include the bugfix version!
323323

324324
self.mRepositories[key]["QRequest"] = QNetworkRequest(url)
325+
self.mRepositories[key]["QRequest"].setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "Relay")
325326
authcfg = self.mRepositories[key]["authcfg"]
326327
if authcfg and isinstance(authcfg, str):
327328
if not QgsApplication.authManager().updateNetworkRequest(

python/pyplugin_installer/qgsplugininstallerinstallingdialog.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from qgis.PyQt.QtNetwork import QNetworkRequest, QNetworkReply
3131

3232
import qgis
33-
from qgis.core import QgsNetworkAccessManager, QgsApplication
33+
from qgis.core import QgsNetworkAccessManager, QgsApplication, QgsNetworkRequestParameters
3434

3535
from .ui_qgsplugininstallerinstallingbase import Ui_QgsPluginInstallerInstallingDialogBase
3636
from .installer_data import removeDir, repositories
@@ -62,6 +62,7 @@ def __init__(self, parent, plugin):
6262

6363
def requestDownloading(self):
6464
self.request = QNetworkRequest(self.url)
65+
self.request.setAttribute(QNetworkRequest.Attribute(QgsNetworkRequestParameters.AttributeInitiatorClass), "QgsPluginInstallerInstallingDialog")
6566
authcfg = repositories.all()[self.plugin["zip_repository"]]["authcfg"]
6667
if authcfg and isinstance(authcfg, str):
6768
if not QgsApplication.authManager().updateNetworkRequest(

src/auth/oauth2/qgsauthoauth2edit.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,6 +1119,7 @@ void QgsAuthOAuth2Edit::registerSoftStatement( const QString &registrationUrl )
11191119
bool res = false;
11201120
QByteArray json = QJsonWrapper::toJson( QVariant( mSoftwareStatement ), &res, &errStr );
11211121
QNetworkRequest registerRequest( regUrl );
1122+
QgsSetRequestInitiatorClass( registerRequest, QStringLiteral( "QgsAuthOAuth2Edit" ) );
11221123
registerRequest.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1Literal( "application/json" ) );
11231124
QNetworkReply *registerReply;
11241125
// For testability: use GET if protocol is file://
@@ -1142,6 +1143,7 @@ void QgsAuthOAuth2Edit::getSoftwareStatementConfig()
11421143
QString config = leSoftwareStatementConfigUrl->text();
11431144
QUrl configUrl( config );
11441145
QNetworkRequest configRequest( configUrl );
1146+
QgsSetRequestInitiatorClass( configRequest, QStringLiteral( "QgsAuthOAuth2Edit" ) );
11451147
QNetworkReply *configReply = QgsNetworkAccessManager::instance()->get( configRequest );
11461148
mDownloading = true;
11471149
connect( configReply, &QNetworkReply::finished, this, &QgsAuthOAuth2Edit::configReplyFinished, Qt::QueuedConnection );

src/auth/oauth2/qgso2.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsapplication.h"
2121
#include "qgsauthoauth2config.h"
2222
#include "qgslogger.h"
23+
#include "qgsnetworkaccessmanager.h"
2324

2425
#include <QDir>
2526
#include <QSettings>
@@ -230,6 +231,7 @@ void QgsO2::link()
230231

231232
QUrl url( tokenUrl_ );
232233
QNetworkRequest tokenRequest( url );
234+
QgsSetRequestInitiatorClass( tokenRequest, QStringLiteral( "QgsO2" ) );
233235
tokenRequest.setHeader( QNetworkRequest::ContentTypeHeader, QLatin1Literal( "application/x-www-form-urlencoded" ) );
234236
QNetworkReply *tokenReply = manager_->post( tokenRequest, payload );
235237

@@ -291,6 +293,7 @@ void QgsO2::onVerificationReceived( QMap<QString, QString> response )
291293
if ( !apiKey_.isEmpty() )
292294
query = QStringLiteral( "?=%1" ).arg( QString( O2_OAUTH2_API_KEY ), apiKey_ );
293295
QNetworkRequest tokenRequest( QUrl( tokenUrl_.toString() + query ) );
296+
QgsSetRequestInitiatorClass( tokenRequest, QStringLiteral( "QgsO2" ) );
294297
tokenRequest.setHeader( QNetworkRequest::ContentTypeHeader, O2_MIME_TYPE_XFORM );
295298
QMap<QString, QString> parameters;
296299
parameters.insert( O2_OAUTH2_GRANT_TYPE_CODE, code() );

src/core/geocms/geonode/qgsgeonoderequest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ void QgsGeoNodeRequest::replyFinished()
185185
else
186186
{
187187
QNetworkRequest request( toUrl );
188-
188+
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGeoNodeRequest" ) );
189189
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );
190190
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
191191

@@ -519,6 +519,7 @@ bool QgsGeoNodeRequest::requestBlocking( const QString &endPoint )
519519
QNetworkReply *QgsGeoNodeRequest::requestUrl( const QString &url )
520520
{
521521
QNetworkRequest request( url );
522+
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGeoNodeRequest" ) );
522523
// Add authentication check here
523524

524525
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, mForceRefresh ? QNetworkRequest::AlwaysNetwork : QNetworkRequest::PreferCache );

src/core/qgsabstractcontentcache.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "qgslogger.h"
2424
#include "qgsmessagelog.h"
2525
#include "qgsapplication.h"
26+
#include "qgsnetworkaccessmanager.h"
2627

2728
#include <QObject>
2829
#include <QMutex>
@@ -322,6 +323,7 @@ class CORE_EXPORT QgsAbstractContentCache : public QgsAbstractContentCacheBase
322323
mPendingRemoteUrls.insert( path );
323324
//fire up task to fetch content in background
324325
QNetworkRequest request( url );
326+
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsAbstractContentCache<%1>" ).arg( mTypeString ) );
325327
request.setAttribute( QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache );
326328
request.setAttribute( QNetworkRequest::CacheSaveControlAttribute, true );
327329

src/core/qgsfiledownloader.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ void QgsFileDownloader::startDownload()
5151
QgsNetworkAccessManager *nam = QgsNetworkAccessManager::instance();
5252

5353
QNetworkRequest request( mUrl );
54+
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsFileDownloader" ) );
5455
if ( !mAuthCfg.isEmpty() )
5556
{
5657
QgsApplication::authManager()->updateNetworkRequest( request, mAuthCfg );

src/core/qgsgml.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ int QgsGml::getFeatures( const QString &uri, QgsWkbTypes::Type *wkbType, QgsRect
6161
mExtent.setMinimal();
6262

6363
QNetworkRequest request( uri );
64+
QgsSetRequestInitiatorClass( request, QStringLiteral( "QgsGml" ) );
65+
6466
if ( !authcfg.isEmpty() )
6567
{
6668
if ( !QgsApplication::authManager()->updateNetworkRequest( request, authcfg ) )

0 commit comments

Comments
 (0)