Update.
This commit is contained in:
parent
cef451cb17
commit
3e7cb9387c
@ -1,11 +1,11 @@
|
|||||||
import pathlib
|
import pathlib
|
||||||
import shutil
|
import shutil
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
import asyncio
|
||||||
import click
|
import click
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
from IPython import start_ipython
|
from IPython import start_ipython
|
||||||
|
from snek.shell import Shell
|
||||||
from snek.app import Application
|
from snek.app import Application
|
||||||
|
|
||||||
|
|
||||||
@ -14,6 +14,15 @@ def cli():
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command()
|
||||||
|
def maintenance():
|
||||||
|
async def run():
|
||||||
|
app = Application(db_path="sqlite:///snek.db")
|
||||||
|
await app.services.container.maintenance()
|
||||||
|
await app.services.channel_message.maintenance()
|
||||||
|
asyncio.run(run())
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.option(
|
@click.option(
|
||||||
"--db_path", default="snek.db", help="Database to initialize if not exists."
|
"--db_path", default="snek.db", help="Database to initialize if not exists."
|
||||||
@ -68,9 +77,7 @@ def serve(port, host, db_path):
|
|||||||
help="Database path for the application",
|
help="Database path for the application",
|
||||||
)
|
)
|
||||||
def shell(db_path):
|
def shell(db_path):
|
||||||
app = Application(db_path=f"sqlite:///{db_path}")
|
Shell(db_path).run()
|
||||||
start_ipython(argv=[], user_ns={"app": app})
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
cli()
|
cli()
|
||||||
|
@ -17,7 +17,7 @@ from snek.service.user import UserService
|
|||||||
from snek.service.user_property import UserPropertyService
|
from snek.service.user_property import UserPropertyService
|
||||||
from snek.service.util import UtilService
|
from snek.service.util import UtilService
|
||||||
from snek.system.object import Object
|
from snek.system.object import Object
|
||||||
|
from snek.service.statistics import StatisticsService
|
||||||
|
|
||||||
@functools.cache
|
@functools.cache
|
||||||
def get_services(app):
|
def get_services(app):
|
||||||
@ -39,6 +39,7 @@ def get_services(app):
|
|||||||
"channel_attachment": ChannelAttachmentService(app=app),
|
"channel_attachment": ChannelAttachmentService(app=app),
|
||||||
"container": ContainerService(app=app),
|
"container": ContainerService(app=app),
|
||||||
"push": PushService(app=app),
|
"push": PushService(app=app),
|
||||||
|
"statistics": StatisticsService(app=app),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -5,6 +5,23 @@ from snek.system.template import whitelist_attributes
|
|||||||
class ChannelMessageService(BaseService):
|
class ChannelMessageService(BaseService):
|
||||||
mapper_name = "channel_message"
|
mapper_name = "channel_message"
|
||||||
|
|
||||||
|
async def maintenance(self):
|
||||||
|
async for message in self.find():
|
||||||
|
updated_at = message["updated_at"]
|
||||||
|
html = message["html"]
|
||||||
|
await self.save(message)
|
||||||
|
|
||||||
|
self.mapper.db['channel_message'].upsert(
|
||||||
|
{
|
||||||
|
"uid": message["uid"],
|
||||||
|
"updated_at": updated_at,
|
||||||
|
},
|
||||||
|
["uid"],
|
||||||
|
)
|
||||||
|
if html != message["html"]:
|
||||||
|
print("Reredefined message", message["uid"])
|
||||||
|
|
||||||
|
|
||||||
async def create(self, channel_uid, user_uid, message, is_final=True):
|
async def create(self, channel_uid, user_uid, message, is_final=True):
|
||||||
model = await self.new()
|
model = await self.new()
|
||||||
|
|
||||||
|
@ -43,6 +43,14 @@ class ContainerService(BaseService):
|
|||||||
async def start(self, channel_uid):
|
async def start(self, channel_uid):
|
||||||
return await self.compose.start(await self.get_container_name(channel_uid))
|
return await self.compose.start(await self.get_container_name(channel_uid))
|
||||||
|
|
||||||
|
async def maintenance(self):
|
||||||
|
async for channel in self.services.channel.find():
|
||||||
|
if not await self.get(channel["uid"]):
|
||||||
|
print("Creating container for channel", channel["uid"])
|
||||||
|
result = await self.create(channel_uid=channel["uid"])
|
||||||
|
print(result)
|
||||||
|
|
||||||
|
|
||||||
async def get_status(self, channel_uid):
|
async def get_status(self, channel_uid):
|
||||||
return await self.compose.get_instance_status(await self.get_container_name(channel_uid))
|
return await self.compose.get_instance_status(await self.get_container_name(channel_uid))
|
||||||
|
|
||||||
@ -60,6 +68,11 @@ class ContainerService(BaseService):
|
|||||||
volumes=None,
|
volumes=None,
|
||||||
):
|
):
|
||||||
name = await self.get_container_name(channel_uid)
|
name = await self.get_container_name(channel_uid)
|
||||||
|
|
||||||
|
test = await self.compose.get_instance(name)
|
||||||
|
if test:
|
||||||
|
return test
|
||||||
|
|
||||||
self.compose.create_instance(
|
self.compose.create_instance(
|
||||||
name,
|
name,
|
||||||
image,
|
image,
|
||||||
@ -74,6 +87,7 @@ class ContainerService(BaseService):
|
|||||||
+ "/home/ubuntu"
|
+ "/home/ubuntu"
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
return await self.compose.get_instance(name)
|
||||||
|
|
||||||
async def create2(
|
async def create2(
|
||||||
self, id, name, status, resources=None, user_uid=None, path=None, readonly=False
|
self, id, name, status, resources=None, user_uid=None, path=None, readonly=False
|
||||||
|
@ -84,6 +84,8 @@ class ComposeFileManager:
|
|||||||
|
|
||||||
async def get_instance(self, name):
|
async def get_instance(self, name):
|
||||||
instance = self.compose.get("services", {}).get(name)
|
instance = self.compose.get("services", {}).get(name)
|
||||||
|
if not instance:
|
||||||
|
return None
|
||||||
instance = json.loads(json.dumps(instance,default=str))
|
instance = json.loads(json.dumps(instance,default=str))
|
||||||
instance['status'] = await self.get_instance_status(name)
|
instance['status'] = await self.get_instance_status(name)
|
||||||
return instance
|
return instance
|
||||||
|
Loading…
Reference in New Issue
Block a user