"#Archivo SPDXCopyrightTexto: 2020 Michael Pöhn michael.poehn@fsfe.org
Identificador de licencia SPDX: AGPL-3.0 o posterior
importar re
tiempo de importación
importar pycurl
importar asyncio
importar fecha y hora
importar tornado.httpclient
importar tornado.curl_httpclient
de colecciones importar deque
desde zoneinfo importar ZoneInfo
UTC = Información de zona('UTC')
CORRIENDO = Verdadero
CEBOLLA_RE = re.compilar(r'.*[a-z0-9]{56}.cebolla')
ACTUALIZACIÓN PREDETERMINADA = 5 * 60
SERIE_DE_TIEMPO_DE_SERVICIO_LARGO = 50
SERVICIO_DEFS = {
"Sitio web": {
"url": "https://f-droid.org",
"sección": "web",
},
"Sitio web (Tor)": {
"url": "http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/",
"calcetines5": "127.0.0.1:9050",
"sección": "web",
},
"Sitio web (Cloudflare)": {
"url": "https://cloudflare.f-droid.org/",
"sección": "web",
},
"Descargar": {
"url": "https://f-droid.org/F-Droid.apk",
"sección": "web",
},
"Buscar": {
"url": "https://search.f-droid.org/",
"sección": "web",
},
"Enlace": {
"url": "https://fdroid.link/",
"sección": "web",
},
"Verificación": {
"url": "https://verification.f-droid.org/",
"sección": "web",
},
"Mastodonte": {
"url": "https://floss.social/@fdroidorg",
"sección": "web",
},
"Foro": {
"url": "https://forum.f-droid.org",
"sección": "web",
},
"f-droid.org": {
"url": "https://f-droid.org/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion": {
"url": "http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"fdroid.tetaneutral.net": {
"url": "https://fdroid.tetaneutral.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.agdsn.de": {
"url": "https://ftp.agdsn.de/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.fau.de": {
"url": "https://ftp.fau.de/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.lysator.liu.se": {
"url": "https://ftp.lysator.liu.se/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion": {
"url": "http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion": {
"url": "http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.cyberbits.eu": {
"url": "https://mirror.cyberbits.eu/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.fcix.net": {
"url": "https://mirror.fcix.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.ossplanet.net": {
"url": "https://mirror.ossplanet.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"plug-mirror.rcac.purdue.edu": {
"url": "https://plug-mirror.rcac.purdue.edu/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"http02 (Finlandia)": {
"url": "http://http02.fdroid.net",
"sección": "proxies",
"enlace": Falso,
},
"http03 (Países Bajos)": {
"url": "http://http03.fdroid.net",
"sección": "proxies",
"enlace": Falso,
},
}
SERIE_DE_HORARIO_DE_SERVICIO = {}
SECCIÓN_DEFS = {
"web": {
"título": "Web",
"descripción": "",
},
"espejos": {
"title": "Espejos",
"descripción": "",
},
"proxies": {
"título": "proxies inversos",
"descripción": "",
},
}
def prepare_curl_socks5(rizo):
curl.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5_HOSTNAME)
definición asíncrona services_loop():
para el nombre, defs en SERVICE_DEFS.items():
SERVICE_TIMESERIES[nombre] = deque([], maxlen=SERVICE_TIMESERIES_LEN)
Si "link" no está en las definiciones:
defs['link'] = Verdadero
si "last_run" no está en las definiciones:
defs['última ejecución'] = 0
si "refresh_interval" no está en las definiciones:
defs["intervalo_de_actualización"] = ACTUALIZACIÓN_PREDETERMINADA
mientras se ejecuta:
para el nombre, defs en SERVICE_DEFS.items():
ahora = tiempo.tiempo()
si defs["last_run"] + defs["refresh_interval"] < ahora:
defs["last_run"] = ahora
# await update_service_timeseries(nombre, defs)
tornado.ioloop.IOLoop.current().spawn_callback(
update_service_timeseries, nombre, definiciones
)
esperar asyncio.sleep(1)
async def update_service_timeseries(nombre, defs):
err=[]
tornado.httpclient.AsyncHTTPClient.configure(
"Tornado.curl_httpclient.CurlAsyncHTTPClient"
)
http_client = tornado.httpclient.AsyncHTTPClient()
reintentos = defs.get("reintentos", 3)
es_cebolla = bool(CEBOLLA_RE.match(defs['url']))
para intentos en rango(reintentos):
intentar:
resp = esperar http_client.fetch(
solicitud=tornado.curl_httpclient.HTTPRequest(
defs['url'],
prepare_curl_callback=preparar_calcetines_curl5,
proxy_host="host local",
puerto proxy=9050,
método="CABEZA",
)
)
si resp.code == 200:
romper
excepto Excepción como e:
err.append(f"{e} ({tipo(e)})")
# En lugar de devolver cualquier valor, simplemente los escribimos en nuestra serie temporal.
# De esta manera permanecerá en RAM y el controlador http podrá acceder a él en cualquier momento.
fecha = datetime.datetime.utcnow() # .replace(tzinfo=UTC)
SERVICE_TIMESERIES[nombre].appendleft(
{
'en línea': "y" si len(err) == 0 de lo contrario "p" si len(err) != reintentos de lo contrario "n",
'timestamp': fecha,
'mensaje': "errores:\n{}\n\n".format("\n".join(err)) if err else "",
}
)"
https://gitlab.com/fdroid/fdroid-monitor/-/raw/master/fdroidmonitor/services.py?ref_type=heads#:~:text=%23Archivo%20SPDXCopyrightTexto%3A%202020,else%20%22%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)
"#Archivo SPDXCopyrightTexto: 2020 Michael Pöhn michael.poehn@fsfe.org
Identificador de licencia SPDX: AGPL-3.0 o posterior
importar re
tiempo de importación
importar pycurl
importar asyncio
importar fecha y hora
importar tornado.httpclient
importar tornado.curl_httpclient
de colecciones importar deque
desde zoneinfo importar ZoneInfo
UTC = Información de zona('UTC')
CORRIENDO = Verdadero
CEBOLLA_RE = re.compilar(r'.*[a-z0-9]{56}.cebolla')
ACTUALIZACIÓN PREDETERMINADA = 5 * 60
SERIE_DE_TIEMPO_DE_SERVICIO_LARGO = 50
SERVICIO_DEFS = {
"Sitio web": {
"url": "https://f-droid.org",
"sección": "web",
},
"Sitio web (Tor)": {
"url": "http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/",
"calcetines5": "127.0.0.1:9050",
"sección": "web",
},
"Sitio web (Cloudflare)": {
"url": "https://cloudflare.f-droid.org/",
"sección": "web",
},
"Descargar": {
"url": "https://f-droid.org/F-Droid.apk",
"sección": "web",
},
"Buscar": {
"url": "https://search.f-droid.org/",
"sección": "web",
},
"Enlace": {
"url": "https://fdroid.link/",
"sección": "web",
},
"Verificación": {
"url": "https://verification.f-droid.org/",
"sección": "web",
},
"Mastodonte": {
"url": "https://floss.social/@fdroidorg",
"sección": "web",
},
"Foro": {
"url": "https://forum.f-droid.org",
"sección": "web",
},
"f-droid.org": {
"url": "https://f-droid.org/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion": {
"url": "http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"fdroid.tetaneutral.net": {
"url": "https://fdroid.tetaneutral.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.agdsn.de": {
"url": "https://ftp.agdsn.de/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.fau.de": {
"url": "https://ftp.fau.de/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftp.lysator.liu.se": {
"url": "https://ftp.lysator.liu.se/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion": {
"url": "http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion": {
"url": "http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.cyberbits.eu": {
"url": "https://mirror.cyberbits.eu/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.fcix.net": {
"url": "https://mirror.fcix.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"espejo.ossplanet.net": {
"url": "https://mirror.ossplanet.net/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"plug-mirror.rcac.purdue.edu": {
"url": "https://plug-mirror.rcac.purdue.edu/fdroid/repo/entry.jar",
"sección": "espejos",
"enlace": Falso,
},
"http02 (Finlandia)": {
"url": "http://http02.fdroid.net",
"sección": "proxies",
"enlace": Falso,
},
"http03 (Países Bajos)": {
"url": "http://http03.fdroid.net",
"sección": "proxies",
"enlace": Falso,
},
}
SERIE_DE_HORARIO_DE_SERVICIO = {}
SECCIÓN_DEFS = {
"web": {
"título": "Web",
"descripción": "",
},
"espejos": {
"title": "Espejos",
"descripción": "",
},
"proxies": {
"título": "proxies inversos",
"descripción": "",
},
}
def prepare_curl_socks5(rizo):
curl.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5_HOSTNAME)
definición asíncrona services_loop():
para el nombre, defs en SERVICE_DEFS.items():
SERVICE_TIMESERIES[nombre] = deque([], maxlen=SERVICE_TIMESERIES_LEN)
Si "link" no está en las definiciones:
defs['link'] = Verdadero
si "last_run" no está en las definiciones:
defs['última ejecución'] = 0
si "refresh_interval" no está en las definiciones:
defs["intervalo_de_actualización"] = ACTUALIZACIÓN_PREDETERMINADA
async def update_service_timeseries(nombre, defs):
err=[]
tornado.httpclient.AsyncHTTPClient.configure(
"Tornado.curl_httpclient.CurlAsyncHTTPClient"
)
http_client = tornado.httpclient.AsyncHTTPClient()
reintentos = defs.get("reintentos", 3)
es_cebolla = bool(CEBOLLA_RE.match(defs['url']))
para intentos en rango(reintentos):
intentar:
resp = esperar http_client.fetch(
solicitud=tornado.curl_httpclient.HTTPRequest(
defs['url'],
prepare_curl_callback=preparar_calcetines_curl5,
proxy_host="host local",
puerto proxy=9050,
método="CABEZA",
)
)
si resp.code == 200:
romper
excepto Excepción como e:
err.append(f"{e} ({tipo(e)})")
# En lugar de devolver cualquier valor, simplemente los escribimos en nuestra serie temporal.
# De esta manera permanecerá en RAM y el controlador http podrá acceder a él en cualquier momento.
fecha = datetime.datetime.utcnow() # .replace(tzinfo=UTC)
SERVICE_TIMESERIES[nombre].appendleft(
{
'en línea': "y" si len(err) == 0 de lo contrario "p" si len(err) != reintentos de lo contrario "n",
'timestamp': fecha,
'mensaje': "errores:\n{}\n\n".format("\n".join(err)) if err else "",
}
)"
https://gitlab.com/fdroid/fdroid-monitor/-/raw/master/fdroidmonitor/services.py?ref_type=heads#:~:text=%23Archivo%20SPDXCopyrightTexto%3A%202020,else%20%22%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)