SERVICE.MESSAGE-HANDLER - сервис обработки событий, классифицированных как нажатие "message". Событие приходит от сервиса фетчинга, после чего обрабатывается. Праллельно производятся необходимые действия внутреннего\внешнего логирования.
Пример обьекта события, которое приходит на sevice.message-handler:
class Event:
event_id: int
event_type: str
peer: Peer
user: User
message: Message
class Message(NamedTuple):
cmid: int
text: str
reply: Optional[Reply]
forward: List[Reply]
attachments: List[str]
class Peer(NamedTuple):
bpid: int
cid: int
name: str
class User(NamedTuple):
uuid: int
name: str
firstname: str
lastname: str
nick: str
Далее, сервис почередно, в порядке выставленных приоритетов, применяет все фильтры и системы модерации к контенту сообщения.
Каждый раз, когда какой-то из фильтров или систем реагируют на нарушения\определенные условия, сервису необходимо тоже что-то отправить в шину Redis. Реакция какого-либо филтьра или системы подразумевает применение каких-то санкций в сторону пользователя. Отсюда появляется новый тип события "Punishment". Оно значительно проще события "Event", но играет не меньшую роль в работе сервисов.
class Punishment:
punishment_type: str
comment: str
cmids: Union[int, List[int]]
bpid: int
uuid: int
points: Optional[int]
mode: Optional[str]
Docker setup:
docker network
name: TOASTER
ip_gateway: 172.18.0.1
subnet: 172.18.0.0/24
driver: bridge
docker image
name: service.message-handler
args:
TOKEN: "..."
GROUPID: "..."
SQL_HOST: "..."
SQL_PORT: "..."
SQL_USER: "..."
SQL_PSWD: "..."
docker container
name: service.message-handler
network_ip: 172.1.08.8
Jenkins shell command:
imageName="service.message-handler"
containerName="service.message-handler"
localIP="172.18.0.8"
networkName="TOASTER"
#stop and remove old container
docker stop $containerName || true && docker rm -f $containerName || true
#remove old image
docker image rm $imageName || true
#build new image
docker build . -t $imageName \
--build-arg TOKEN=$TOKEN \
--build-arg GROUPID=$GROUPID \
--build-arg SQL_HOST=$SQL_HOST \
--build-arg SQL_PORT=$SQL_PORT \
--build-arg SQL_USER=$SQL_USER \
--build-arg SQL_PSWD=$SQL_PSWD
#run container
docker run -d \
--name $containerName \
--restart always \
$imageName
#network setup
docker network connect --ip $localIP $networkName $containerName
#clear chaches
docker system prune -f