Skip to content

Commit

Permalink
Add savant container welcome message (#708)
Browse files Browse the repository at this point in the history
  • Loading branch information
denisvmedyantsev authored Mar 25, 2024
1 parent 56c4eb7 commit d8493dc
Show file tree
Hide file tree
Showing 24 changed files with 86 additions and 7 deletions.
2 changes: 2 additions & 0 deletions adapters/ds/sinks/always_on_rtsp/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from adapters.ds.sinks.always_on_rtsp.zeromq_proxy import ZeroMqProxy
from savant.gstreamer import Gst
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message

LOGGER_NAME = 'adapters.ao_sink.entrypoint'
logger = get_logger(LOGGER_NAME)
Expand All @@ -26,6 +27,7 @@ def main():
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))

init_logging()
logger.info(get_starting_message('always-on-rtsp sink adapter'))
config = AppConfig()

Gst.init(None)
Expand Down
2 changes: 2 additions & 0 deletions adapters/ds/sinks/display.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ fi
SYNC_OUTPUT="${SYNC_OUTPUT:="false"}"
CLOSING_DELAY="${CLOSING_DELAY:="0"}"

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "display sink adapter"
gst-launch-1.0 \
savant_rs_video_player "${ZEROMQ_SRC_ARGS[@]}" \
sync="${SYNC_OUTPUT}" closing-delay="${CLOSING_DELAY}"
2 changes: 2 additions & 0 deletions adapters/gst/sinks/video_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from savant.gstreamer.codecs import Codec
from savant.utils.config import opt_config, strtobool
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message
from savant.utils.zeromq import ZeroMQMessage, ZeroMQSource

LOGGER_NAME = 'adapters.video_files_sink'
Expand Down Expand Up @@ -373,6 +374,7 @@ def main():
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))

logger = get_logger(LOGGER_NAME)
logger.info(get_starting_message('video files sink adapter'))

dir_location = os.environ['DIR_LOCATION']
zmq_endpoint = os.environ['ZMQ_ENDPOINT']
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/ffmpeg.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "ffmpeg source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/gige_cam.sh
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "gige-cam source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/media_files.sh
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "media files source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/multi_stream.sh
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "multistream source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/rtsp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "rtsp source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/usb_cam.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "usb-cam source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
2 changes: 2 additions & 0 deletions adapters/gst/sources/video_loop.sh
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ handler() {
}
trap handler SIGINT SIGTERM

source "${PROJECT_PATH}/adapters/shared/utils.sh"
print_starting_message "video-loop source adapter"
gst-launch-1.0 --eos-on-shutdown "${PIPELINE[@]}" &

child_pid="$!"
Expand Down
3 changes: 2 additions & 1 deletion adapters/python/bridge/buffer.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from savant.metrics.prometheus import BaseMetricsCollector, PrometheusMetricsExporter
from savant.utils.config import opt_config
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message
from savant.utils.zeromq import ZeroMQMessage, ZeroMQSource

LOGGER_NAME = 'adapters.buffer'
Expand Down Expand Up @@ -400,10 +401,10 @@ def build_video_pipeline(config: Config):

def main():
init_logging()
logger.info(get_starting_message('buffer bridge adapter'))
# To gracefully shutdown the adapter on SIGTERM (raise KeyboardInterrupt)
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))
config = Config()
logger.info('Starting the adapter')
queue = PersistentQueueWithCapacity(
config.buffer.path,
config.buffer.len + config.buffer.service_messages,
Expand Down
4 changes: 4 additions & 0 deletions adapters/python/shared/kafka_redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from savant.utils.config import opt_config, strtobool
from savant.utils.fps_meter import FPSMeter
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message

LOGGER_NAME = 'adapters.kafka_redis'
logger = get_logger(LOGGER_NAME)
Expand Down Expand Up @@ -221,16 +222,19 @@ def log_fps(self):


def run_kafka_redis_adapter(
name: str,
adapter_class: Type[BaseKafkaRedisAdapter],
config_class: Type[BaseConfig],
):
"""Run kafka-redis adapter.
:param name: The adapter name.
:param adapter_class: The adapter implementation.
:param config_class: The configuration implementation.
"""

init_logging()
logger.info(get_starting_message(name))
# To gracefully shutdown the adapter on SIGTERM (raise KeyboardInterrupt)
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))
source = adapter_class(config_class())
Expand Down
2 changes: 2 additions & 0 deletions adapters/python/sinks/image_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from savant.api.enums import ExternalFrameType
from savant.utils.config import opt_config, strtobool
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message
from savant.utils.zeromq import ZeroMQMessage, ZeroMQSource

LOGGER_NAME = 'adapters.image_files_sink'
Expand Down Expand Up @@ -150,6 +151,7 @@ def main():
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))

logger = get_logger(LOGGER_NAME)
logger.info(get_starting_message('image files sink adapter'))

dir_location = os.environ['DIR_LOCATION']
zmq_endpoint = os.environ['ZMQ_ENDPOINT']
Expand Down
2 changes: 1 addition & 1 deletion adapters/python/sinks/kafka_redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,4 +344,4 @@ def build_producer(self) -> Producer:


if __name__ == '__main__':
run_kafka_redis_adapter(KafkaRedisSink, Config)
run_kafka_redis_adapter('kafka-redis sink adapter', KafkaRedisSink, Config)
2 changes: 2 additions & 0 deletions adapters/python/sinks/metadata_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from savant.api.parser import parse_video_frame
from savant.utils.config import opt_config, strtobool
from savant.utils.logging import get_logger, init_logging
from savant.utils.welcome import get_starting_message
from savant.utils.zeromq import ZeroMQMessage, ZeroMQSource

LOGGER_NAME = 'adapters.metadata_json_sink'
Expand Down Expand Up @@ -180,6 +181,7 @@ def main():
signal.signal(signal.SIGTERM, signal.getsignal(signal.SIGINT))

logger = get_logger(LOGGER_NAME)
logger.info(get_starting_message('metadata sink adapter'))

location = os.environ['LOCATION']
zmq_endpoint = os.environ['ZMQ_ENDPOINT']
Expand Down
2 changes: 1 addition & 1 deletion adapters/python/sources/kafka_redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,4 +286,4 @@ def build_consumer(self) -> Consumer:


if __name__ == '__main__':
run_kafka_redis_adapter(KafkaRedisSource, Config)
run_kafka_redis_adapter('kafka-redis source adapter', KafkaRedisSource, Config)
11 changes: 11 additions & 0 deletions adapters/shared/utils.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/bash

########################
# Print starting message
# Arguments:
# $1 - the name of starting module or adapter
#########################
function print_starting_message {
local name=${1-}
python3 -c "from savant.utils.welcome import get_starting_message; print(get_starting_message('$name'))"
}
2 changes: 2 additions & 0 deletions docker/Dockerfile.adapters-gstreamer
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,5 @@ COPY adapters/gst adapters/gst
COPY gst_plugins/python/logger.py adapters/gst/gst_plugins/python/
ENV GST_PLUGIN_PATH=$PROJECT_PATH/adapters/gst/gst_plugins \
LOGLEVEL=info

RUN echo 'python3 -c "from savant.utils.welcome import get_welcome_message; print(get_welcome_message())"' >> /etc/bash.bashrc
2 changes: 2 additions & 0 deletions docker/Dockerfile.adapters-py
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,5 @@ COPY savant savant
COPY adapters/shared adapters/shared
COPY adapters/python adapters/python
ENV LOGLEVEL=info

RUN echo 'python3 -c "from savant.utils.welcome import get_welcome_message; print(get_welcome_message())"' >> /etc/bash.bashrc
2 changes: 2 additions & 0 deletions docker/Dockerfile.deepstream
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ ENV SAVANT_STATUS_FILEPATH=$PROJECT_PATH/status.txt
HEALTHCHECK --interval=5s --timeout=5s --start-period=30m --retries=3 \
CMD [ "sh", "/opt/savant/healthcheck.sh" ]

RUN echo 'python3 -c "from savant.utils.welcome import get_welcome_message; print(get_welcome_message())"' >> /etc/bash.bashrc

ENTRYPOINT ["python", "-m", "savant.entrypoint"]


Expand Down
1 change: 1 addition & 0 deletions savant/entrypoint/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
> echo "
name: test-module
parameters:
log_level: DEBUG
batch_size: 1
" | python -m savant.entrypoint
Expand Down
7 changes: 5 additions & 2 deletions savant/entrypoint/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from savant.utils.check_display import check_display_env
from savant.utils.logging import get_logger, init_logging, update_logging
from savant.utils.sink_factories import sink_factory
from savant.utils.welcome import get_starting_message


def main(module_config: Union[str, Path, IO[Any]]):
Expand All @@ -41,13 +42,14 @@ def main(module_config: Union[str, Path, IO[Any]]):
config = ModuleConfig().config

init_logging(config.parameters['log_level'])
logger = get_logger('main')
logger.info(get_starting_message('module'))

# load module config
config = ModuleConfig().load(module_config)

# reconfigure savant logger with updated loglevel
update_logging(config.parameters['log_level'])
logger = get_logger('main')

check_display_env(logger)

Expand Down Expand Up @@ -115,13 +117,14 @@ def build_module_engines(module_config: Union[str, Path, IO[Any]]):
config = ModuleConfig().config

init_logging(config.parameters['log_level'])
logger = get_logger('engine_builder')
logger.info(get_starting_message('module engine builder'))

# load module config
config = ModuleConfig().load(module_config)

# reconfigure savant logger with updated loglevel
update_logging(config.parameters['log_level'])
logger = get_logger('engine_builder')

check_display_env(logger)

Expand Down
4 changes: 2 additions & 2 deletions savant/utils/logging/log_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,14 +169,14 @@ def check_func_conflict(func, name, original_name, is_func, target):
if registered_num != 'Level ' + level_name:
check_conflict(
registered_num != level_num,
'Level {!r} already registered ' 'in logging module'.format(level_name),
'Level {!r} already registered in logging module'.format(level_name),
)

current_level = getattr(logging, level_name, None)
if current_level is not None:
check_conflict(
current_level != level_num,
'Level {!r} already defined ' 'in logging module'.format(level_name),
'Level {!r} already defined in logging module'.format(level_name),
)

logging_func = getattr(logging, method_name, None)
Expand Down
29 changes: 29 additions & 0 deletions savant/utils/welcome.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from savant.utils.version import version


def get_welcome_message() -> str:
"""Returns the welcome message that is used
when starting Savant container.
"""
version_info = (
f'Savant Version {version.SAVANT}\n'
f'Savant RS Version {version.SAVANT_RS}\n'
f'DeepStream Version {version.DEEPSTREAM}'
)
return f'\n============\n== Savant ==\n============\n\n{version_info}\n'


def get_starting_message(name: str):
"""Returns the message that is used
when starting Savant component (module, adapter).
"""
version_info = (
f'Savant {version.SAVANT}, '
f'Savant RS {version.SAVANT_RS}, '
f'DeepStream {version.DEEPSTREAM}'
)
return f'Starting the {name}. Packages version info: {version_info}.'


if __name__ == '__main__':
print(get_welcome_message())

0 comments on commit d8493dc

Please sign in to comment.