Merge pull request #199 from albertoxamin/dev

refactor metrics ands add metrics on cards usage
This commit is contained in:
Alberto Xamin 2022-03-25 15:44:16 +01:00 committed by GitHub
commit 88b8e26734
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 188 additions and 159 deletions

View File

@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies

View File

@ -1,5 +1,3 @@
import time
import os
import json
from typing import List, Set, Dict, Tuple, Optional
import random
@ -15,14 +13,13 @@ import bang.expansions.fistful_of_cards.card_events as ce
import bang.expansions.high_noon.card_events as ceh
import bang.expansions.gold_rush.shop_cards as grc
import bang.expansions.gold_rush.characters as grch
import datadog
from metrics import Metrics
class Game:
def __init__(self, name, sio:socketio, dd_api:datadog.api = None):
def __init__(self, name, sio:socketio):
super().__init__()
self.sio = sio
self.name = name
self.dd_api = dd_api
self.players: List[pl.Player] = []
self.spectators: List[pl.Player] = []
self.deck: Deck = None
@ -451,8 +448,7 @@ class Game:
if not self.someone_won:
self.someone_won = True
self.sio.emit('chat_message', room=self.name, data=f'_won|{p.name}|{p.role.name}')
if self.dd_api:
self.dd_api.Metric.send(metric='player_win', points=[(int(time.time()), 1)], tags=["server:backend", f"host:{os.environ['HOST']}", f"char:{p.character.name}", f"role:{p.role.name}"])
Metrics.send_metric('player_win', points=[1], tags=[f"char:{p.character.name}", f"role:{p.role.name}"])
p.notify_self()
if hasattr(self.sio, 'is_fake'):
print('announces_winners(): Running for tests, you will have to call reset manually!')
@ -610,8 +606,8 @@ class Game:
self.is_handling_death = True
import bang.expansions.dodge_city.characters as chd
print(f'{self.name}: the killer is {player.attacker}')
if self.dd_api and player.character and player.role:
self.dd_api.Metric.send(metric='player_death', points=[(int(time.time()), 1)], tags=["server:backend", f"host:{os.environ['HOST']}", f"char:{player.character.name}", f"role:{player.role.name}"])
if player.character and player.role:
Metrics.send_metric('player_death', points=[1], tags=[f"char:{player.character.name}", f"role:{player.role.name}"])
if len([c for c in player.gold_rush_equipment if isinstance(c, grc.Ricercato)]) > 0 and player.attacker and player.attacker in self.players:
player.attacker.gold_nuggets += 1
player.attacker.hand.append(self.deck.draw(True))

View File

@ -14,6 +14,7 @@ import bang.expansions.gold_rush.shop_cards as grc
import bang.expansions.gold_rush.characters as grch
import eventlet
from typing import List
from metrics import Metrics
class PendingAction(IntEnum):
PICK = 0
@ -647,6 +648,7 @@ class Player:
self.hand.insert(hand_index, card)
else:
did_play_card = True
Metrics.send_metric('play_card', points=[1], tags=[f'success:{did_play_card}', f'card:{card.name}', f'bot:{self.is_bot}'])
print("did play card:", did_play_card)
self.notify_self()
if self.is_bot:

28
backend/metrics.py Normal file
View File

@ -0,0 +1,28 @@
import os
import time
from datadog import initialize, api
class Metrics:
send_metrics = False
@classmethod
def init(cls):
if "DATADOG_API_KEY" in os.environ and "DATADOG_APP_KEY" in os.environ and "HOST" in os.environ:
Metrics.send_metrics = True
initialize()
api.Event.create(title="Backend start", text="", tags=["server:backend", f"host:{os.environ['HOST']}"], alert_type="info")
else:
print("Datadog not configured")
@classmethod
def send_metric(cls, metric_name, **kwargs):
if Metrics.send_metrics:
kwargs['tags'] = ["server:backend", f"host:{os.environ['HOST']}"] + kwargs.get('tags', [])
kwargs['points'][0] = (int(time.time()) , kwargs['points'][0])
api.Metric.send(metric=metric_name, **kwargs)
@classmethod
def send_event(cls, event_name, event_data, **kwargs):
if Metrics.send_metrics:
kwargs['tags'] = ["server:backend", f"host:{os.environ['HOST']}"] + kwargs.get('tags', [])
api.Event.create(title=event_name, text=event_data, tags=kwargs['tags'], alert_type=kwargs.get('alert_type', "info"))

View File

@ -11,17 +11,10 @@ from bang.players import Player, PendingAction
import requests
from discord_webhook import DiscordWebhook
from datadog import initialize, api
from metrics import Metrics
send_metrics = False
if "DATADOG_API_KEY" in os.environ and "DATADOG_APP_KEY" in os.environ:
initialize()
send_metrics = True
api.Event.create(title="Backend start", text="", tags=["server:backend", f"host:{os.environ['HOST']}"], alert_type="info")
else:
print("Datadog not configured")
Metrics.init()
import sys
sys.setrecursionlimit(10**6) # this should prevents bots from stopping
@ -55,8 +48,7 @@ blacklist: List[str] = []
def advertise_lobbies():
sio.emit('lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if not g.started and len(g.players) < 10 and not g.is_hidden])
sio.emit('spectate_lobbies', room='lobby', data=[{'name': g.name, 'players': len(g.players), 'locked': g.password != ''} for g in games if g.started])
if send_metrics:
api.Metric.send(metric='lobbies', points=[(int(time.time()), len(games))], tags=["server:backend", "type:lobbies", f"host:{os.environ['HOST']}"])
Metrics.send_metric('lobbies', points=[len(games)])
@sio.event
def connect(sid, environ):
@ -65,8 +57,7 @@ def connect(sid, environ):
print('connect ', sid)
sio.enter_room(sid, 'lobby')
sio.emit('players', room='lobby', data=online_players)
if send_metrics:
api.Metric.send(metric='online_players', points=[(int(time.time()), online_players)], tags=["server:backend", f"host:{os.environ['HOST']}"])
Metrics.send_metric('online_players', points=[online_players])
@sio.event
def get_online_players(sid):
@ -89,8 +80,7 @@ def report(sid, text):
sio.emit('chat_message', room=sid, data={'color': f'green','text':f'Report OK'})
else:
print("WARNING: DISCORD_WEBHOOK not found")
if send_metrics:
api.Event.create(title="BUG REPORT", text=data, tags=["server:backend", f"host:{os.environ['HOST']}"])
Metrics.send_event('BUG_REPORT', event_data=text)
print(f'New bug report, replay at https://www.toptal.com/developers/hastebin/{key}')
@sio.event
@ -174,8 +164,7 @@ def disconnect(sid):
games.pop(games.index(sio.get_session(sid).game))
print('disconnect ', sid)
advertise_lobbies()
if send_metrics:
api.Metric.send(metric='online_players', points=[(int(time.time()), online_players)], tags=["server:backend", f"host:{os.environ['HOST']}"])
Metrics.send_metric('online_players', points=[online_players])
@sio.event
def create_room(sid, room_name):
@ -184,7 +173,7 @@ def create_room(sid, room_name):
room_name += f'_{random.randint(0,100)}'
sio.leave_room(sid, 'lobby')
sio.enter_room(sid, room_name)
g = Game(room_name, sio, api if send_metrics else None)
g = Game(room_name, sio)
g.add_player(sio.get_session(sid))
if room_name in blacklist:
g.is_hidden = True
@ -283,15 +272,13 @@ def start_game(sid):
ses: Player = sio.get_session(sid)
ses.game.start_game()
advertise_lobbies()
if send_metrics:
api.Metric.send(metric='start_game', points=[(int(time.time()), 1)], tags=(["server:backend", f"host:{os.environ['HOST']}"] + [f"exp:{e}" for e in ses.game.expansions]))
Metrics.send_metric('start_game', points=[1], tags=[f"exp:{e}" for e in ses.game.expansions])
@sio.event
def set_character(sid, name):
ses: Player = sio.get_session(sid)
ses.game.rpc_log.append(f'{ses.name};set_character;{name}')
if send_metrics:
api.Metric.send(metric='set_character', points=[(int(time.time()), 1)], tags=["server:backend", f"host:{os.environ['HOST']}", f"char:{name}"])
Metrics.send_metric('set_character', points=[1], tags=[f"char:{name}"])
ses.set_character(name)
@sio.event

View File

@ -8,7 +8,7 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"caniuse-lite": "^1.0.30001317",
"caniuse-lite": "^1.0.30001320",
"core-js": "^3.16.2",
"pretty-checkbox-vue": "^1.1.9",
"register-service-worker": "^1.7.2",
@ -23,13 +23,13 @@
"@vue/cli-plugin-babel": "~4.5.15",
"@vue/cli-plugin-eslint": "~4.5.15",
"@vue/cli-plugin-pwa": "~4.5.15",
"@vue/cli-plugin-router": "~5.0.3",
"@vue/cli-plugin-router": "~5.0.4",
"@vue/cli-service": "~4.5.15",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^7.20.0",
"vue-template-compiler": "^2.6.14",
"workbox-webpack-plugin": "^6.5.1"
"workbox-webpack-plugin": "^6.5.2"
},
"eslintConfig": {
"root": true,

View File

@ -2,6 +2,15 @@
# yarn lockfile v1
"@achrinza/node-ipc@9.2.2":
version "9.2.2"
resolved "https://registry.yarnpkg.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz#ae1b5d3d6a9362034eea60c8d946b93893c2e4ec"
integrity sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==
dependencies:
"@node-ipc/js-queue" "2.0.3"
event-pubsub "4.3.0"
js-message "1.0.7"
"@apideck/better-ajv-errors@^0.3.1":
version "0.3.1"
resolved "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.1.tgz"
@ -880,6 +889,13 @@
call-me-maybe "^1.0.1"
glob-to-regexp "^0.3.0"
"@node-ipc/js-queue@2.0.3":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz#ac7fe33d766fa53e233ef8fedaf3443a01c5a4cd"
integrity sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==
dependencies:
easy-stack "1.0.1"
"@nodelib/fs.stat@^1.1.2":
version "1.1.3"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"
@ -1261,12 +1277,12 @@
dependencies:
"@vue/cli-shared-utils" "^4.5.15"
"@vue/cli-plugin-router@~5.0.3":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.3.tgz#8413d8a6347c556ffb6a1965d6992ff625564177"
integrity sha512-9GPewake2QhmnNe1p72Cejv0jyenH+gv3+3JlZf4kPR68ncqwF7YiUjxbnJnItWgq4Zep3+YqYmQ4PsIWjMPUQ==
"@vue/cli-plugin-router@~5.0.4":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.4.tgz#d30b20125408d39c7ad19a7f8a4a82aee9e033a9"
integrity sha512-lylzCuH3Br0BcTz5IxxSffpyoF9dQ2k4jTdK8QlWrnRanWGw7P9C0kYMr9rohHaXpvAlu6bio392gbNIWpEepg==
dependencies:
"@vue/cli-shared-utils" "^5.0.3"
"@vue/cli-shared-utils" "^5.0.4"
"@vue/cli-plugin-vuex@^4.5.15":
version "4.5.15"
@ -1351,18 +1367,18 @@
semver "^6.1.0"
strip-ansi "^6.0.0"
"@vue/cli-shared-utils@^5.0.3":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.3.tgz#e8facc759f4e2ceed4a26f33943c0005a834e4af"
integrity sha512-xAHxFDYVohHWXOLdmGvka3ffQcRgKdACempFQkGJX74Q7OBf0zPf5WH+vQXhlR17eA3LmWdY+Nv8OfsIGim6Fg==
"@vue/cli-shared-utils@^5.0.4":
version "5.0.4"
resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.4.tgz#e3f42575cb6b70e021272ef2c8bb52ca544ecf27"
integrity sha512-nfAsj8Nopu5sVHMBIaut/YL7NaJFVmTBSTJD7LM17jc5uytrM9JwiRtzCiv3JWRBG78Xdb/s2Xb/1YR4fkdmkQ==
dependencies:
"@achrinza/node-ipc" "9.2.2"
chalk "^4.1.2"
execa "^1.0.0"
joi "^17.4.0"
launch-editor "^2.2.1"
lru-cache "^6.0.0"
node-fetch "^2.6.7"
node-ipc "9.2.1"
open "^8.0.2"
ora "^5.3.0"
read-pkg "^5.1.1"
@ -2228,10 +2244,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001317:
version "1.0.30001317"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz#0548fb28fd5bc259a70b8c1ffdbe598037666a1b"
integrity sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001320:
version "1.0.30001320"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz#8397391bec389b8ccce328636499b7284ee13285"
integrity sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==
case-sensitive-paths-webpack-plugin@^2.3.0:
version "2.4.0"
@ -3138,7 +3154,7 @@ duplexify@^3.4.2, duplexify@^3.6.0:
readable-stream "^2.0.0"
stream-shift "^1.0.0"
easy-stack@^1.0.1:
easy-stack@1.0.1, easy-stack@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz"
@ -5396,7 +5412,7 @@ node-forge@^0.10.0:
version "0.10.0"
resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz"
node-ipc@9.2.1, node-ipc@^9.1.1:
node-ipc@^9.1.1:
version "9.2.1"
resolved "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz"
dependencies:
@ -8062,13 +8078,13 @@ word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
workbox-background-sync@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.1.tgz#df79c6a4a22945d8a44493a4947a6ed0f720ef86"
integrity sha512-T5a35fagLXQvV8Dr4+bDU+XYsP90jJ3eBLjZMKuCNELMQZNj+VekCODz1QK44jgoBeQk+vp94pkZV6G+e41pgg==
workbox-background-sync@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.5.2.tgz#28be9bf89b8e4e0379d45903280c7c12f4df836f"
integrity sha512-EjG37LSMDJ1TFlFg56wx6YXbH4/NkG09B9OHvyxx+cGl2gP5OuOzsCY3rOPJSpbcz6jpuA40VIC3HzSD4OvE1g==
dependencies:
idb "^6.1.4"
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-background-sync@^4.3.1:
version "4.3.1"
@ -8076,12 +8092,12 @@ workbox-background-sync@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-broadcast-update@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.1.tgz#9aecb116979b0709480b84cfd1beca7a901d01d4"
integrity sha512-mb/oyblyEpDbw167cCTyHnC3RqCnCQHtFYuYZd+QTpuExxM60qZuBH1AuQCgvLtDcztBKdEYK2VFD9SZYgRbaQ==
workbox-broadcast-update@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-6.5.2.tgz#b1f32bb40a9dcb5b05ca27e09fb7c01a0a126182"
integrity sha512-DjJYraYnprTZE/AQNoeogaxI1dPuYmbw+ZJeeP8uXBSbg9SNv5wLYofQgywXeRepv4yr/vglMo9yaHUmBMc+4Q==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-broadcast-update@^4.3.1:
version "4.3.1"
@ -8089,10 +8105,10 @@ workbox-broadcast-update@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-build@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.1.tgz#6b5e8f090bb608267868540d3072b44b8531b3bc"
integrity sha512-coDUDzHvFZ1ADOl3wKCsCSyOBvkPKlPgcQDb6LMMShN1zgF31Mev/1HzN3+9T2cjjWAgFwZKkuRyExqc1v21Zw==
workbox-build@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-6.5.2.tgz#774faafd84b1dc94b74739ceb5d8ff367748523b"
integrity sha512-TVi4Otf6fgwikBeMpXF9n0awHfZTMNu/nwlMIT9W+c13yvxkmDFMPb7vHYK6RUmbcxwPnz4I/R+uL76+JxG4JQ==
dependencies:
"@apideck/better-ajv-errors" "^0.3.1"
"@babel/core" "^7.11.1"
@ -8116,21 +8132,21 @@ workbox-build@6.5.1:
strip-comments "^2.0.1"
tempy "^0.6.0"
upath "^1.2.0"
workbox-background-sync "6.5.1"
workbox-broadcast-update "6.5.1"
workbox-cacheable-response "6.5.1"
workbox-core "6.5.1"
workbox-expiration "6.5.1"
workbox-google-analytics "6.5.1"
workbox-navigation-preload "6.5.1"
workbox-precaching "6.5.1"
workbox-range-requests "6.5.1"
workbox-recipes "6.5.1"
workbox-routing "6.5.1"
workbox-strategies "6.5.1"
workbox-streams "6.5.1"
workbox-sw "6.5.1"
workbox-window "6.5.1"
workbox-background-sync "6.5.2"
workbox-broadcast-update "6.5.2"
workbox-cacheable-response "6.5.2"
workbox-core "6.5.2"
workbox-expiration "6.5.2"
workbox-google-analytics "6.5.2"
workbox-navigation-preload "6.5.2"
workbox-precaching "6.5.2"
workbox-range-requests "6.5.2"
workbox-recipes "6.5.2"
workbox-routing "6.5.2"
workbox-strategies "6.5.2"
workbox-streams "6.5.2"
workbox-sw "6.5.2"
workbox-window "6.5.2"
workbox-build@^4.3.1:
version "4.3.1"
@ -8160,12 +8176,12 @@ workbox-build@^4.3.1:
workbox-sw "^4.3.1"
workbox-window "^4.3.1"
workbox-cacheable-response@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.1.tgz#f71d0a75b3d6846e39594955e99ac42fd26f8693"
integrity sha512-3TdtH/luDiytmM+Cn72HCBLZXmbeRNJqZx2yaVOfUZhj0IVwZqQXhNarlGE9/k6U5Jelb+TtpH2mLVhnzfiSMg==
workbox-cacheable-response@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-6.5.2.tgz#d9252eb99f0d0fceb70f63866172f4eaac56a3e8"
integrity sha512-UnHGih6xqloV808T7ve1iNKZMbpML0jGLqkkmyXkJbZc5j16+HRSV61Qrh+tiq3E3yLvFMGJ3AUBODOPNLWpTg==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-cacheable-response@^4.3.1:
version "4.3.1"
@ -8173,22 +8189,22 @@ workbox-cacheable-response@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-core@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.1.tgz#0dba3bccf883a46dfa61cc412eaa3cb09bb549e6"
integrity sha512-qObXZ39aFJ2N8X7IUbGrJHKWguliCuU1jOXM/I4MTT84u9BiKD2rHMkIzgeRP1Ixu9+cXU4/XHJq3Cy0Qqc5hw==
workbox-core@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-6.5.2.tgz#f5e06a22c6cb4651d3e13107443d972fdbd47364"
integrity sha512-IlxLGQf+wJHCR+NM0UWqDh4xe/Gu6sg2i4tfZk6WIij34IVk9BdOQgi6WvqSHd879jbQIUgL2fBdJUJyAP5ypQ==
workbox-core@^4.3.1:
version "4.3.1"
resolved "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz"
workbox-expiration@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.1.tgz#9f105fcf3362852754884ad153888070ce98b692"
integrity sha512-iY/cTADAQATMmPkUBRmQdacqq0TJd2wMHimBQz+tRnPGHSMH+/BoLPABPnu7O7rT/g/s59CUYYRGxe3mEgoJCA==
workbox-expiration@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-6.5.2.tgz#ee6ed755a220a0b375d67831f9237e4dcbccb59c"
integrity sha512-5Hfp0uxTZJrgTiy9W7AjIIec+9uTOtnxY/tRBm4DbqcWKaWbVTa+izrKzzOT4MXRJJIJUmvRhWw4oo8tpmMouw==
dependencies:
idb "^6.1.4"
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-expiration@^4.3.1:
version "4.3.1"
@ -8196,15 +8212,15 @@ workbox-expiration@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-google-analytics@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.1.tgz#685224d439c1e7a943f8241d65e2a34ee95a4ba0"
integrity sha512-qZU46/h4dbionYT6Yk6iBkUwpiEzAfnO1W7KkI+AMmY7G9/gA03dQQ7rpTw8F4vWrG7ahTUGWDFv6fERtaw1BQ==
workbox-google-analytics@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-6.5.2.tgz#a79fa7a40824873baaa333dcd72d1fdf1c53adf5"
integrity sha512-8SMar+N0xIreP5/2we3dwtN1FUmTMScoopL86aKdXBpio8vXc8Oqb5fCJG32ialjN8BAOzDqx/FnGeCtkIlyvw==
dependencies:
workbox-background-sync "6.5.1"
workbox-core "6.5.1"
workbox-routing "6.5.1"
workbox-strategies "6.5.1"
workbox-background-sync "6.5.2"
workbox-core "6.5.2"
workbox-routing "6.5.2"
workbox-strategies "6.5.2"
workbox-google-analytics@^4.3.1:
version "4.3.1"
@ -8215,12 +8231,12 @@ workbox-google-analytics@^4.3.1:
workbox-routing "^4.3.1"
workbox-strategies "^4.3.1"
workbox-navigation-preload@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.1.tgz#a244e3bdf99ce86da7210315ca1ba5aef3710825"
integrity sha512-aKrgAbn2IMgzTowTi/ZyKdQUcES2m++9aGtpxqsX7Gn9ovCY8zcssaMEAMMwrIeveij5HiWNBrmj6MWDHi+0rg==
workbox-navigation-preload@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-6.5.2.tgz#ffb3d9d5cdb881a3824851707da221dbb0bb3f23"
integrity sha512-iqDNWWMswjCsZuvGFDpcX1Z8InBVAlVBELJ28xShsWWntALzbtr0PXMnm2WHkXCc56JimmGldZi1N5yDPiTPOg==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-navigation-preload@^4.3.1:
version "4.3.1"
@ -8228,14 +8244,14 @@ workbox-navigation-preload@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-precaching@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.1.tgz#177b6424f1e71e601b9c3d6864decad2655f9ff9"
integrity sha512-EzlPBxvmjGfE56YZzsT/vpVkpLG1XJhoplgXa5RPyVWLUL1LbwEAxhkrENElSS/R9tgiTw80IFwysidfUqLihg==
workbox-precaching@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-6.5.2.tgz#a3117b4d3eb61ce8d01b9dfc063c48155bd7f9d3"
integrity sha512-OZAlQ8AAT20KugGKKuJMHdQ8X1IyNQaLv+mPTHj+8Dmv8peBq5uWNzs4g/1OSFmXsbXZ6a1CBC6YtQWVPhJQ9w==
dependencies:
workbox-core "6.5.1"
workbox-routing "6.5.1"
workbox-strategies "6.5.1"
workbox-core "6.5.2"
workbox-routing "6.5.2"
workbox-strategies "6.5.2"
workbox-precaching@^4.3.1:
version "4.3.1"
@ -8243,12 +8259,12 @@ workbox-precaching@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-range-requests@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.1.tgz#f40f84aa8765940543eba16131d02f12b38e2fdc"
integrity sha512-57Da/qRbd9v33YlHX0rlSUVFmE4THCjKqwkmfhY3tNLnSKN2L5YBS3qhWeDO0IrMNgUj+rGve2moKYXeUqQt4A==
workbox-range-requests@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-6.5.2.tgz#b8b7e5b5830fecc22f0a1d8815457921df2e5bf9"
integrity sha512-zi5VqF1mWqfCyJLTMXn1EuH/E6nisqWDK1VmOJ+TnjxGttaQrseOhMn+BMvULFHeF8AvrQ0ogfQ6bSv0rcfAlg==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-range-requests@^4.3.1:
version "4.3.1"
@ -8256,24 +8272,24 @@ workbox-range-requests@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-recipes@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.1.tgz#d2fb21743677cc3ca9e1fc9e3b68f0d1587df205"
integrity sha512-DGsyKygHggcGPQpWafC/Nmbm1Ny3sB2vE9r//3UbeidXiQ+pLF14KEG1/0NNGRaY+lfOXOagq6d1H7SC8KA+rA==
workbox-recipes@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-6.5.2.tgz#19f47ec25a8788c65d0cc8d217cbebc0bbbb5c63"
integrity sha512-2lcUKMYDiJKvuvRotOxLjH2z9K7jhj8GNUaHxHNkJYbTCUN3LsX1cWrsgeJFDZ/LgI565t3fntpbG9J415ZBXA==
dependencies:
workbox-cacheable-response "6.5.1"
workbox-core "6.5.1"
workbox-expiration "6.5.1"
workbox-precaching "6.5.1"
workbox-routing "6.5.1"
workbox-strategies "6.5.1"
workbox-cacheable-response "6.5.2"
workbox-core "6.5.2"
workbox-expiration "6.5.2"
workbox-precaching "6.5.2"
workbox-routing "6.5.2"
workbox-strategies "6.5.2"
workbox-routing@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.1.tgz#5488795ae850fe3ae435241143b54ff25ab0db70"
integrity sha512-yAAncdTwanvlR8KPjubyvFKeAok8ZcIws6UKxvIAg0I+wsf7UYi93DXNuZr6RBSQrByrN6HkCyjuhmk8P63+PA==
workbox-routing@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-6.5.2.tgz#e0ad46246ba51224fd57eff0dd46891b3220cb9a"
integrity sha512-nR1w5PjF6IVwo0SX3oE88LhmGFmTnqqU7zpGJQQPZiKJfEKgDENQIM9mh3L1ksdFd9Y3CZVkusopHfxQvit/BA==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-routing@^4.3.1:
version "4.3.1"
@ -8281,12 +8297,12 @@ workbox-routing@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-strategies@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.1.tgz#51cabbddad5a1956eb9d51cf6ce01ab0a6372756"
integrity sha512-JNaTXPy8wXzKkr+6za7/eJX9opoZk7UgY261I2kPxl80XQD8lMjz0vo9EOcBwvD72v3ZhGJbW84ZaDwFEhFvWA==
workbox-strategies@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-6.5.2.tgz#56b02e6959c6391351011fc2e5b0829aff1ed859"
integrity sha512-fgbwaUMxbG39BHjJIs2y2X21C0bmf1Oq3vMQxJ1hr6y5JMJIm8rvKCcf1EIdAr+PjKdSk4ddmgyBQ4oO8be4Uw==
dependencies:
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-strategies@^4.3.1:
version "4.3.1"
@ -8294,13 +8310,13 @@ workbox-strategies@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-streams@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.1.tgz#12036817385fa4449a86a3ef77fce1cb00ecad9f"
integrity sha512-7jaTWm6HRGJ/ewECnhb+UgjTT50R42E0/uNCC4eTKQwnLO/NzNGjoXTdQgFjo4zteR+L/K6AtFAiYKH3ZJbAYw==
workbox-streams@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-6.5.2.tgz#2fb6ba307f7d2cbda63f64522a197be868b4ea25"
integrity sha512-ovD0P4UrgPtZ2Lfc/8E8teb1RqNOSZr+1ZPqLR6sGRZnKZviqKbQC3zVvvkhmOIwhWbpL7bQlWveLVONHjxd5w==
dependencies:
workbox-core "6.5.1"
workbox-routing "6.5.1"
workbox-core "6.5.2"
workbox-routing "6.5.2"
workbox-streams@^4.3.1:
version "4.3.1"
@ -8308,10 +8324,10 @@ workbox-streams@^4.3.1:
dependencies:
workbox-core "^4.3.1"
workbox-sw@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.1.tgz#f9256b40f0a7e94656ccd06f127ba19a92cd23c5"
integrity sha512-hVrQa19yo9wzN1fQQ/h2JlkzFpkuH2qzYT2/rk7CLaWt6tLnTJVFCNHlGRRPhytZSf++LoIy7zThT714sowT/Q==
workbox-sw@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-6.5.2.tgz#2f5dca0e96c61a450fccf0405095ddf1b6f43bc7"
integrity sha512-2KhlYqtkoqlnPdllj2ujXUKRuEFsRDIp6rdE4l1PsxiFHRAFaRTisRQpGvRem5yxgXEr+fcEKiuZUW2r70KZaw==
workbox-sw@^4.3.1:
version "4.3.1"
@ -8325,24 +8341,24 @@ workbox-webpack-plugin@^4.3.1:
json-stable-stringify "^1.0.1"
workbox-build "^4.3.1"
workbox-webpack-plugin@^6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.1.tgz#da88b4b6d8eff855958f0e7ebb7aa3eea50a8282"
integrity sha512-SHtlQBpKruI16CAYhICDMkgjXE2fH5Yp+D+1UmBfRVhByZYzusVOykvnPm8ObJb9d/tXgn9yoppoxafFS7D4vQ==
workbox-webpack-plugin@^6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.2.tgz#0cf6e1d23d5107a88fd8502fd4f534215e1dd298"
integrity sha512-StrJ7wKp5tZuGVcoKLVjFWlhDy+KT7ZWsKnNcD6F08wA9Cpt6JN+PLIrplcsTHbQpoAV8+xg6RvcG0oc9z+RpQ==
dependencies:
fast-json-stable-stringify "^2.1.0"
pretty-bytes "^5.4.1"
upath "^1.2.0"
webpack-sources "^1.4.3"
workbox-build "6.5.1"
workbox-build "6.5.2"
workbox-window@6.5.1:
version "6.5.1"
resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.1.tgz#7b5ca29467b1da45dc9e2b5a1b89159d3eb9957a"
integrity sha512-oRlun9u7b7YEjo2fIDBqJkU2hXtrEljXcOytRhfeQRbqXxjUOpFgXSGRSAkmDx1MlKUNOSbr+zfi8h5n7In3yA==
workbox-window@6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-6.5.2.tgz#46d6412cd57039bdf3d5dd914ad21fb3f98fe980"
integrity sha512-2kZH37r9Wx8swjEOL4B8uGM53lakMxsKkQ7mOKzGA/QAn/DQTEZGrdHWtypk2tbhKY5S0jvPS+sYDnb2Z3378A==
dependencies:
"@types/trusted-types" "^2.0.2"
workbox-core "6.5.1"
workbox-core "6.5.2"
workbox-window@^4.3.1:
version "4.3.1"