Skip to content

Commit 18180bf

Browse files
committed
Remove redis retries. Lint. Set Nominatim defaults correctly.
1 parent f7ebd83 commit 18180bf

File tree

2 files changed

+17
-31
lines changed

2 files changed

+17
-31
lines changed

fingr.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env python3
22
"""
33
Fingr - Weather via finger service.
4-
5-
This uses the modular structure from fingr/ package.
64
"""
75

86
import argparse

fingr/server.py

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
import argparse
44
import asyncio
5-
import sys
65
from typing import Any, Optional
76

7+
import geopy.geocoders
88
import redis
99
from geopy.geocoders import Nominatim # type: ignore[import-untyped]
1010
from prometheus_client import start_http_server
11-
from redis.exceptions import ConnectionError
1211

1312
from .config import load_deny_list, load_motd_list, load_user_agent, random_message
1413
from .formatting import format_meteogram, format_oneliner
@@ -89,7 +88,7 @@ async def handle_request(reader: asyncio.StreamReader, writer: asyncio.StreamWri
8988
imperial: bool = False
9089
beaufort: bool = False
9190
oneliner: bool = False
92-
request_status: str = "success"
91+
request_status: str = "unknown"
9392

9493
with track_time(request_duration):
9594
try:
@@ -98,7 +97,7 @@ async def handle_request(reader: asyncio.StreamReader, writer: asyncio.StreamWri
9897
screenwidth: int = 80
9998
wind_chill: bool = False
10099

101-
logger.debug("Request received", ip=addr[0], input=user_input)
100+
logger.info("Request received", ip=addr[0], input=user_input)
102101

103102
# Deny list
104103
if addr[0] in denylist:
@@ -199,6 +198,12 @@ async def handle_request(reader: asyncio.StreamReader, writer: asyncio.StreamWri
199198
beaufort=beaufort,
200199
wind_chill=wind_chill,
201200
)
201+
request_status = "success"
202+
203+
except Exception as err:
204+
logger.error("Error processing request", error=str(err))
205+
response = "Internal server error."
206+
request_status = "error"
202207

203208
finally:
204209
requests_total.labels(status=request_status).inc()
@@ -223,38 +228,21 @@ async def start_server(args: argparse.Namespace) -> None:
223228
denylist = load_deny_list()
224229
motdlist = load_motd_list()
225230
user_agent = load_user_agent()
226-
geolocator = Nominatim(user_agent=user_agent, timeout=3)
227231

228-
# Connect to Redis with retry
229-
logger.info("Connecting to Redis", host=args.redis_host, port=args.redis_port)
232+
# Set up geolocator, this outputs "Converted retries..."
233+
geopy.geocoders.options.timeout = 3 # type: ignore[attr-defined]
234+
geopy.geocoders.options.default_user_agent = user_agent # type: ignore[attr-defined]
235+
geolocator = Nominatim()
236+
237+
# Connect to Redis
238+
logger.debug("Connecting to Redis", host=args.redis_host, port=args.redis_port)
230239
r = redis.Redis(host=args.redis_host, port=args.redis_port)
231-
max_retries: int = 10
232-
for attempt in range(max_retries):
233-
try:
234-
r.ping()
235-
logger.info("Redis connected")
236-
break
237-
except ConnectionError:
238-
if attempt < max_retries - 1:
239-
logger.warning(
240-
"Redis not ready, retrying",
241-
attempt=attempt + 1,
242-
max_retries=max_retries,
243-
retry_delay=2,
244-
)
245-
await asyncio.sleep(2)
246-
else:
247-
logger.error(
248-
"Unable to connect to Redis", host=args.redis_host, port=args.redis_port
249-
)
250-
sys.exit(1)
251240

252241
# Start Prometheus metrics server
253242
metrics_port: int = 9090
254243
start_http_server(metrics_port)
255-
logger.info("Prometheus metrics server started", port=metrics_port)
244+
logger.debug("Prometheus metrics server started", port=metrics_port)
256245

257-
logger.info("Starting server", port=args.port)
258246
server: asyncio.AbstractServer = await asyncio.start_server(
259247
handle_request, args.host, args.port
260248
)

0 commit comments

Comments
 (0)