Skip to content

Commit 974b670

Browse files
committed
feat: adds support for Discord Webhooks (#1)
* feat: added webhook for test completion * chore: updated gitignore to ignore webhook
1 parent 19c2445 commit 974b670

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ Media/*
1818
Media/PGNs/*
1919
Media/Networks/*
2020
Media/Events/*
21+
22+
webhook

OpenBench/utils.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@
2020

2121
import datetime
2222
import hashlib
23-
import json
2423
import math
2524
import os
26-
import random
2725
import re
2826
import requests
2927

@@ -41,6 +39,7 @@
4139
from OpenBench.config import OPENBENCH_CONFIG
4240
from OpenBench.models import *
4341
from OpenBench.stats import TrinomialSPRT, PentanomialSPRT
42+
from OpenBench.templatetags.mytags import longStatBlock
4443

4544

4645
import OpenBench.views
@@ -396,6 +395,34 @@ def network_edit(request, engine, network):
396395

397396
return OpenBench.views.redirect(request, '/networks/%s' % (network.engine), status='Applied changes')
398397

398+
def notify_webhook(request, test_id):
399+
webhook = open('webhook').read().strip() # Removing trailing whitespace/newline, if present
400+
test = Test.objects.get(id=test_id)
401+
402+
# Compute stats
403+
lower, elo, upper = OpenBench.stats.Elo(test.results())
404+
error = max(upper - elo, elo - lower)
405+
elo = OpenBench.templatetags.mytags.twoDigitPrecision(elo)
406+
error = OpenBench.templatetags.mytags.twoDigitPrecision(error)
407+
outcome = 'passed' if test.passed else 'failed'
408+
409+
# Green if passing, red if failing.
410+
color = 0xFEFF58
411+
if test.passed:
412+
color = 0x37F769
413+
elif test.wins < test.losses:
414+
color = 0xFA4E4E
415+
416+
return requests.post(webhook, json={
417+
'username': test.dev_engine,
418+
'embeds': [{
419+
'author': { 'name': test.author },
420+
'title': f'Test `{test.dev.name}` vs `{test.base.name}` {outcome}',
421+
'url': request.build_absolute_uri(f'/test/{test_id}'),
422+
'color': color,
423+
'description': f'```\n{longStatBlock(test)}\n```',
424+
}]
425+
})
399426

400427
def update_test(request, machine):
401428

@@ -502,5 +529,9 @@ def update_test(request, machine):
502529
Machine.objects.filter(id=machine_id).update(
503530
updated=timezone.now()
504531
)
532+
533+
# Send update to webhook, if it exists
534+
if test.finished and os.path.exists('webhook'):
535+
notify_webhook(request, test_id)
505536

506537
return [{}, { 'stop' : True }][test.finished]

0 commit comments

Comments
 (0)