Skip to content

Commit 01a5f30

Browse files
committed
add log support
1 parent 7fe28e5 commit 01a5f30

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

roboflow/adapters/deploymentapi.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,15 @@ def list_machine_types(api_key):
5555
if response.status_code != 200:
5656
return response.status_code, response.text
5757
return response.status_code, response.json()
58+
59+
60+
def get_deployment_log(api_key, deployment_name, from_timestamp=None, to_timestamp=None):
61+
url = f"{DEDICATED_DEPLOYMENT_URL}/get_log?api_key={api_key}&deployment_name={deployment_name}"
62+
if from_timestamp is not None:
63+
url += f"&from_timestamp={from_timestamp.isoformat()}"
64+
if to_timestamp is not None:
65+
url += f"&to_timestamp={to_timestamp.isoformat()}"
66+
response = requests.get(url)
67+
if response.status_code != 200:
68+
return response.status_code, response.text
69+
return response.status_code, response.json()

roboflow/deployment.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import time
3-
from datetime import datetime
3+
from datetime import datetime, timedelta
44

55
from roboflow.adapters import deploymentapi
66
from roboflow.config import load_roboflow_api_key
@@ -19,6 +19,7 @@ def add_deployment_parser(subparsers):
1919
)
2020
deployment_list_parser = deployment_subparsers.add_parser("list", help="list dedicated deployments in a workspace")
2121
deployment_delete_parser = deployment_subparsers.add_parser("delete", help="delete a dedicated deployment")
22+
deployment_log_parser = deployment_subparsers.add_parser("log", help="show log info for a dedicated deployment")
2223

2324
deployment_machine_type_parser.set_defaults(func=list_machine_types)
2425
deployment_machine_type_parser.add_argument("-a", "--api_key", help="api key")
@@ -68,6 +69,14 @@ def add_deployment_parser(subparsers):
6869
deployment_delete_parser.set_defaults(func=delete_deployment)
6970
deployment_delete_parser.add_argument("-a", "--api_key", help="api key")
7071
deployment_delete_parser.add_argument("deployment_name", help="deployment name")
72+
73+
deployment_log_parser.set_defaults(func=get_deployment_log)
74+
deployment_log_parser.add_argument("-a", "--api_key", help="api key")
75+
deployment_log_parser.add_argument("deployment_name", help="deployment name")
76+
deployment_log_parser.add_argument("-d", "--duration", help="duration of log (from now) in seconds", type=int, default=3600)
77+
deployment_log_parser.add_argument(
78+
"-f", "--follow", help="follow log output", action="store_true"
79+
)
7180

7281

7382
def list_machine_types(args):
@@ -149,3 +158,33 @@ def delete_deployment(args):
149158
print(f"{status_code}: {msg}")
150159
return
151160
print(json.dumps(msg, indent=2))
161+
162+
163+
def get_deployment_log(args):
164+
api_key = args.api_key or load_roboflow_api_key(None)
165+
if api_key is None:
166+
print("Please provide an api key")
167+
return
168+
169+
to_timestamp = datetime.now()
170+
from_timestamp = (to_timestamp - timedelta(seconds = args.duration))
171+
log_ids = set() # to avoid duplicate logs
172+
while True:
173+
status_code, msg = deploymentapi.get_deployment_log(api_key, args.deployment_name, from_timestamp, to_timestamp)
174+
if status_code != 200:
175+
print(f"{status_code}: {msg}")
176+
return
177+
178+
for log in msg[::-1]: # logs are sorted by reversed timestamp
179+
if log['insert_id'] in log_ids:
180+
continue
181+
log_ids.add(log['insert_id'])
182+
print(f'[{datetime.fromisoformat(log["timestamp"]).strftime("%Y-%m-%d %H:%M:%S.%f")}] {log["payload"]}')
183+
184+
if not args.follow:
185+
break
186+
187+
time.sleep(10)
188+
from_timestamp = to_timestamp
189+
to_timestamp = datetime.now()
190+

0 commit comments

Comments
 (0)