Skip to content

Commit 89e3bb8

Browse files
committed
Merge branch 'kubernetes/readiness-probe' into zsb/prod
2 parents 60d17e1 + 5015fe3 commit 89e3bb8

File tree

11 files changed

+126
-21
lines changed

11 files changed

+126
-21
lines changed

jaseci_core/jaseci/extens/act_lib/std.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,3 +229,8 @@ def log_activity(
229229
activity = elastic.generate_from_meta(meta, log, action)
230230

231231
return elastic.doc_activity(activity, query, suffix)
232+
233+
234+
@jaseci_action()
235+
def clear_cache(all: bool = True, meta: dict = {}):
236+
meta["h"].clear_cache(all)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
"""
2+
Health APIs
3+
"""
4+
from jaseci.jsorc.jsorc import JsOrc
5+
from jaseci.extens.api.interface import Interface
6+
7+
8+
class HealthApi:
9+
"""
10+
API for readiness probe
11+
"""
12+
13+
@Interface.public_api(allowed_methods=["get"])
14+
def health(self):
15+
"""
16+
readiness probe
17+
"""
18+
# to update
19+
# we might need to return some other information here
20+
return JsOrc.__running__

jaseci_core/jaseci/extens/api/jsorc_api.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,14 @@ def service_info(self, name: str):
118118
"""
119119

120120
# will throw exception if not existing
121-
svc = JsOrc.svc(name)
121+
return JsOrc.svc(name).info()
122122

123-
return {
124-
"enabled": svc.enabled,
125-
"automated": svc.automated,
126-
"quiet": svc.quiet,
127-
"state": svc.state.name,
128-
"config": svc.config,
129-
"error": str(svc.error) if svc.error else None,
130-
}
123+
@Interface.admin_api(cli_args=["name"])
124+
def service_config_set(self, name: str, config: dict):
125+
"""
126+
Set a service config
127+
"""
128+
return JsOrc.svc_conf_set(name, config, self._h)
131129

132130
@Interface.admin_api(cli_args=["name"])
133131
def service_refresh(self, name: str):

jaseci_core/jaseci/extens/svc/kube_svc.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from base64 import b64decode
2-
2+
from datetime import datetime
33
from kubernetes import config as kubernetes_config
44
from kubernetes.client import (
55
ApiClient,
@@ -394,3 +394,39 @@ def resolve_manifest(
394394
placeholder_resolver(manifest, manifest)
395395

396396
return manifest
397+
398+
def has_replicas(self):
399+
try:
400+
return (
401+
self.read(
402+
"Deployment", "jaseci", self.namespace, quiet=self.quiet
403+
).spec.replicas
404+
> 1
405+
)
406+
except Exception as e:
407+
self.quiet or logger.error(f"Error checking jaseci replica -- {e}")
408+
409+
def restart(self):
410+
try:
411+
return self.api.patch_namespaced_deployment(
412+
name="jaseci",
413+
namespace=self.namespace,
414+
body={
415+
"spec": {
416+
"template": {
417+
"metadata": {
418+
"annotations": {
419+
"kubectl.kubernetes.io/restartedAt": datetime.utcnow().isoformat(
420+
"T"
421+
)
422+
+ "Z"
423+
}
424+
}
425+
}
426+
}
427+
},
428+
)
429+
except ApiException as e:
430+
self.quiet or logger.error(
431+
f"Error triggering jaseci rollout restart -- {e}"
432+
)

jaseci_core/jaseci/extens/svc/redis_svc.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ def hkeys(self, name):
4949
# CLEANER #
5050
###################################################
5151

52-
def clear(self):
52+
def clear(self, all=True):
5353
if self.is_running():
54-
self.app.flushdb()
54+
if all:
55+
self.app.flushall()
56+
else:
57+
self.app.flushdb()
5558

5659
# ---------------- PROXY EVENTS ----------------- #
5760

jaseci_core/jaseci/jsorc/jsorc.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def configure(cls):
8484
@classmethod
8585
def run(cls):
8686
if not cls.__running__:
87-
cls.__running__ == True
87+
cls.__running__ = True
8888
cls.configure()
8989
cls.push_interval(1)
9090

@@ -264,6 +264,32 @@ def svc(cls, service: str, cast: T = None) -> Union[T, cs]:
264264

265265
return cls._service_instances[service]
266266

267+
@classmethod
268+
def svc_conf_set(
269+
cls, service: str, config: dict, hook: None, cast: T = None
270+
) -> Union[T, cs]:
271+
from jaseci.extens.svc.kube_svc import KubeService
272+
273+
if service not in cls._services:
274+
raise Exception(f"Service {service} is not existing!")
275+
276+
if cls.db_check():
277+
instance = cls._services[service][0]
278+
hook = hook or cls.hook(use_proxy=instance["proxy"])
279+
hook.save_glob(instance["config"], dumps(config))
280+
hook.commit()
281+
282+
kube = cls.svc("kube", KubeService)
283+
if kube.is_running() and kube.has_replicas():
284+
hook.clear_cache(True)
285+
return (
286+
"Rollout restart commencing..."
287+
if not isinstance(kube.restart(), ApiException)
288+
else "Attempt to rollout restart failed! Please check the logs for further information!"
289+
)
290+
291+
return cls.svc_reset(service).info()
292+
267293
@classmethod
268294
def svc_reset(cls, service, cast: T = None) -> Union[T, cs]:
269295
"""
@@ -333,7 +359,7 @@ def decorator(service: T) -> T:
333359
target=cls._services,
334360
entry={
335361
"type": service,
336-
"config": config or f"{name.upper()}_CONFIG",
362+
"config": (config or f"{name}_CONFIG").upper(),
337363
"manifest": manifest,
338364
"manifest_type": manifest_type,
339365
"priority": priority,

jaseci_core/jaseci/jsorc/jsorc_utils.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,3 +284,15 @@ def __setstate__(self, ignored):
284284
# for build on pickle load
285285
self.state = State.FAILED
286286
del self
287+
288+
# ------------------- COMMON -------------------- #
289+
290+
def info(self):
291+
return {
292+
"enabled": self.enabled,
293+
"automated": self.automated,
294+
"quiet": self.quiet,
295+
"state": self.state.name,
296+
"config": self.config,
297+
"error": str(self.error) if self.error else None,
298+
}

jaseci_core/jaseci/jsorc/memory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def find_class_and_import(self, j_type, mod):
231231

232232
return cls
233233

234-
def clear_cache(self):
234+
def clear_cache(self, all=False):
235235
MemoryHook.__init__(self)
236236

237237
####################################################

jaseci_core/jaseci/jsorc/redis.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,9 @@ def decommit_obj_from_cache(self, item):
131131
# CLEANER #
132132
###################################################
133133

134-
def clear_cache(self):
135-
if self.redis.is_running():
136-
self.redis.app.flushdb()
137-
138-
MemoryHook.__init__(self)
134+
def clear_cache(self, all=False):
135+
super().clear_cache(all)
136+
self.redis.clear(all)
139137

140138

141139
# ----------------------------------------------- #

jaseci_core/jaseci/prim/master.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from jaseci.extens.api.user_api import UserApi
1818
from jaseci.extens.api.queue_api import QueueApi
1919
from jaseci.extens.api.webhook_api import WebhookApi
20+
from jaseci.extens.api.health_api import HealthApi
2021
from jaseci.jsorc.jsorc import JsOrc
2122

2223

@@ -35,6 +36,7 @@ class Master(
3536
UserApi,
3637
QueueApi,
3738
WebhookApi,
39+
HealthApi,
3840
):
3941
"""Main class for master functions for user"""
4042

scripts/jsorc/jaseci-template

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,12 @@ $j{env_vars}
207207
mountPath: /script
208208
- name: jaseci-logs
209209
mountPath: /.jaseci_logs/
210-
210+
readinessProbe:
211+
httpGet:
212+
path: /js_public/health
213+
port: 80
214+
scheme: HTTP
215+
successThreshold: 3
211216
volumes:
212217
- name: prod-script
213218
configMap:

0 commit comments

Comments
 (0)