|
20 | 20 |
|
21 | 21 | import datetime
|
22 | 22 | import hashlib
|
23 |
| -import json |
24 | 23 | import math
|
25 | 24 | import os
|
26 |
| -import random |
27 | 25 | import re
|
28 | 26 | import requests
|
29 | 27 |
|
|
41 | 39 | from OpenBench.config import OPENBENCH_CONFIG
|
42 | 40 | from OpenBench.models import *
|
43 | 41 | from OpenBench.stats import TrinomialSPRT, PentanomialSPRT
|
| 42 | +from OpenBench.templatetags.mytags import longStatBlock |
44 | 43 |
|
45 | 44 |
|
46 | 45 | import OpenBench.views
|
@@ -396,6 +395,34 @@ def network_edit(request, engine, network):
|
396 | 395 |
|
397 | 396 | return OpenBench.views.redirect(request, '/networks/%s' % (network.engine), status='Applied changes')
|
398 | 397 |
|
| 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 | + }) |
399 | 426 |
|
400 | 427 | def update_test(request, machine):
|
401 | 428 |
|
@@ -502,5 +529,9 @@ def update_test(request, machine):
|
502 | 529 | Machine.objects.filter(id=machine_id).update(
|
503 | 530 | updated=timezone.now()
|
504 | 531 | )
|
| 532 | + |
| 533 | + # Send update to webhook, if it exists |
| 534 | + if test.finished and os.path.exists('webhook'): |
| 535 | + notify_webhook(request, test_id) |
505 | 536 |
|
506 | 537 | return [{}, { 'stop' : True }][test.finished]
|
0 commit comments