Skip to content

Commit e5c4a9f

Browse files
feat: additional filesystem monitoring (#8405)
* feat: additional filesystem monitoring * chore: rename setting for tmp directory * fix: restructure path to new endpoint --------- Co-authored-by: Jennifer Richards <[email protected]>
1 parent 7ede9b2 commit e5c4a9f

File tree

9 files changed

+35
-1
lines changed

9 files changed

+35
-1
lines changed

dev/deploy-to-container/settings_local.py

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
BIBXML_BASE_PATH = '/assets/ietfdata/derived/bibxml'
6565
IDSUBMIT_REPOSITORY_PATH = INTERNET_DRAFT_PATH
6666
FTP_DIR = '/assets/ftp'
67+
NFS_METRICS_TMP_DIR = '/assets/tmp'
6768

6869
NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/'
6970
SLIDE_STAGING_PATH = '/test/staging/'

dev/diff/settings_local.py

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
INTERNET_ALL_DRAFTS_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/'
6161
BIBXML_BASE_PATH = '/assets/ietfdata/derived/bibxml'
6262
FTP_DIR = '/assets/ftp'
63+
NFS_METRICS_TMP_DIR = '/assets/tmp'
6364

6465
NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/'
6566
SLIDE_STAGING_PATH = 'test/staging/'

dev/tests/settings_local.py

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
INTERNET_ALL_DRAFTS_ARCHIVE_DIR = '/assets/ietf-ftp/internet-drafts/'
6060
BIBXML_BASE_PATH = '/assets/ietfdata/derived/bibxml'
6161
FTP_DIR = '/assets/ftp'
62+
NFS_METRICS_TMP_DIR = '/assets/tmp'
6263

6364
NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/'
6465
SLIDE_STAGING_PATH = 'test/staging/'

docker/configs/settings_local.py

+1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
BIBXML_BASE_PATH = '/assets/ietfdata/derived/bibxml'
5151
IDSUBMIT_REPOSITORY_PATH = INTERNET_DRAFT_PATH
5252
FTP_DIR = '/assets/ftp'
53+
NFS_METRICS_TMP_DIR = '/assets/tmp'
5354

5455
NOMCOM_PUBLIC_KEYS_DIR = 'data/nomcom_keys/public_keys/'
5556
SLIDE_STAGING_PATH = '/assets/www6s/staging/'

docker/scripts/app-create-dirs.sh

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ for sub in \
2929
/assets/www6/iesg \
3030
/assets/www6/iesg/evaluation \
3131
/assets/media/photo \
32+
/assets/tmp \
3233
/assets/ftp \
3334
/assets/ftp/charter \
3435
/assets/ftp/internet-drafts \

ietf/api/tests.py

+8
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,14 @@ def test_api_appauth(self):
970970
self.assertEqual(jsondata['success'], True)
971971
self.client.logout()
972972

973+
@override_settings(APP_API_TOKENS={"ietf.api.views.nfs_metrics": ["valid-token"]})
974+
def test_api_nfs_metrics(self):
975+
url = urlreverse("ietf.api.views.nfs_metrics")
976+
r = self.client.get(url)
977+
self.assertEqual(r.status_code, 403)
978+
r = self.client.get(url, headers={"X-Api-Key": "valid-token"})
979+
self.assertContains(r, 'nfs_latency_seconds{operation="write"}')
980+
973981
def test_api_get_session_matherials_no_agenda_meeting_url(self):
974982
meeting = MeetingFactory(type_id='ietf')
975983
session = SessionFactory(meeting=meeting)

ietf/api/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@
8282
url(r'^version/?$', api_views.version),
8383
# Application authentication API key
8484
url(r'^appauth/(?P<app>authortools|bibxml)$', api_views.app_auth),
85+
# NFS metrics endpoint
86+
url(r'^metrics/nfs/?$', api_views.nfs_metrics),
8587
# latest versions
8688
url(r'^rfcdiff-latest-json/%(name)s(?:-%(rev)s)?(\.txt|\.html)?/?$' % settings.URL_REGEXPS, api_views.rfcdiff_latest_json),
8789
url(r'^rfcdiff-latest-json/(?P<name>[Rr][Ff][Cc] [0-9]+?)(\.txt|\.html)?/?$', api_views.rfcdiff_latest_json),

ietf/api/views.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33

44
import base64
55
import binascii
6+
import datetime
67
import json
8+
from pathlib import Path
9+
from tempfile import NamedTemporaryFile
710
import jsonschema
811
import pytz
912
import re
@@ -264,7 +267,22 @@ def app_auth(request, app: Literal["authortools", "bibxml"]):
264267
json.dumps({'success': True}),
265268
content_type='application/json')
266269

267-
270+
@requires_api_token
271+
@csrf_exempt
272+
def nfs_metrics(request):
273+
with NamedTemporaryFile(dir=settings.NFS_METRICS_TMP_DIR,delete=False) as fp:
274+
fp.close()
275+
mark = datetime.datetime.now()
276+
with open(fp.name, mode="w") as f:
277+
f.write("whyioughta"*1024)
278+
write_latency = (datetime.datetime.now() - mark).total_seconds()
279+
mark = datetime.datetime.now()
280+
with open(fp.name, "r") as f:
281+
_=f.read()
282+
read_latency = (datetime.datetime.now() - mark).total_seconds()
283+
Path(f.name).unlink()
284+
response=f'nfs_latency_seconds{{operation="write"}} {write_latency}\nnfs_latency_seconds{{operation="read"}} {read_latency}\n'
285+
return HttpResponse(response)
268286

269287
def find_doc_for_rfcdiff(name, rev):
270288
"""rfcdiff lookup heuristics

ietf/settings.py

+1
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,7 @@ def skip_unreadable_post(record):
761761
DERIVED_DIR = '/a/ietfdata/derived'
762762
FTP_DIR = '/a/ftp'
763763
ALL_ID_DOWNLOAD_DIR = '/a/www/www6s/download'
764+
NFS_METRICS_TMP_DIR = '/a/tmp'
764765

765766
DOCUMENT_FORMAT_ALLOWLIST = ["txt", "ps", "pdf", "xml", "html", ]
766767

0 commit comments

Comments
 (0)