Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F7159930
media-relay
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
media-relay
View Options
#!/usr/bin/env python
if
__name__
==
'__main__'
:
import
mediaproxy
import
errno
import
sys
import
subprocess
from
application
import
log
from
application.configuration
import
ConfigFile
,
datatypes
from
application.process
import
process
,
ProcessError
from
application.version
import
Version
from
argparse
import
ArgumentParser
IP_FORWARD_FILE
=
'/proc/sys/net/ipv4/ip_forward'
CONNTRACK_ACCT_FILE
=
'/proc/sys/net/netfilter/nf_conntrack_acct'
KERNEL_VERSION_FILE
=
'/proc/sys/kernel/osrelease'
name
=
'media-relay'
fullname
=
'MediaProxy Relay'
description
=
'MediaProxy Relay component'
process
.
configuration
.
user_directory
=
None
process
.
configuration
.
subdirectory
=
mediaproxy
.
mediaproxy_subdirectory
process
.
runtime
.
subdirectory
=
mediaproxy
.
mediaproxy_subdirectory
parser
=
ArgumentParser
(
usage
=
'
%(prog)s
[options]'
)
parser
.
add_argument
(
'--version'
,
action
=
'version'
,
version
=
'
%(prog)s
{}'
.
format
(
mediaproxy
.
__version__
))
parser
.
add_argument
(
'--systemd'
,
action
=
'store_true'
,
help
=
'run as a systemd simple service and log to journal'
)
parser
.
add_argument
(
'--no-fork'
,
action
=
'store_false'
,
dest
=
'fork'
,
help
=
'run in the foreground and log to the terminal'
)
parser
.
add_argument
(
'--config-dir'
,
dest
=
'config_directory'
,
default
=
None
,
help
=
'the configuration directory ({})'
.
format
(
process
.
configuration
.
system_directory
),
metavar
=
'PATH'
)
parser
.
add_argument
(
'--runtime-dir'
,
dest
=
'runtime_directory'
,
default
=
None
,
help
=
'the runtime directory ({})'
.
format
(
process
.
runtime
.
directory
),
metavar
=
'PATH'
)
parser
.
add_argument
(
'--debug'
,
action
=
'store_true'
,
help
=
'enable verbose logging'
)
parser
.
add_argument
(
'--debug-memory'
,
action
=
'store_true'
,
help
=
'enable memory debugging'
)
options
=
parser
.
parse_args
()
log
.
Formatter
.
prefix_format
=
'{record.levelname:<8s} '
if
options
.
config_directory
is
not
None
:
process
.
configuration
.
local_directory
=
options
.
config_directory
if
options
.
runtime_directory
is
not
None
:
process
.
runtime
.
directory
=
options
.
runtime_directory
if
not
sys
.
platform
.
startswith
(
'linux'
):
log
.
critical
(
'Cannot start
%s
. A Linux host is required for operation.'
%
fullname
)
sys
.
exit
(
1
)
try
:
subprocess
.
call
([
'modprobe'
,
'ip_tables'
],
env
=
{
'PATH'
:
'/usr/sbin:/sbin:/usr/bin:/bin'
})
except
OSError
as
e
:
log
.
critical
(
'Cannot start
%s
: failed to load the ip_tables kernel module:
%s
'
%
(
fullname
,
e
))
sys
.
exit
(
1
)
try
:
kernel_version
=
Version
.
parse
(
open
(
KERNEL_VERSION_FILE
)
.
read
()
.
strip
())
except
(
OSError
,
IOError
,
ValueError
):
log
.
critical
(
'Could not determine Linux kernel version'
)
sys
.
exit
(
1
)
if
kernel_version
<
Version
(
2
,
6
,
18
):
log
.
critical
(
'Linux kernel version 2.6.18 or newer is required to run the media relay'
)
sys
.
exit
(
1
)
try
:
ip_forward
=
bool
(
int
(
open
(
IP_FORWARD_FILE
)
.
read
()))
except
(
OSError
,
IOError
,
ValueError
):
ip_forward
=
False
if
not
ip_forward
:
log
.
critical
(
'IP forwarding is not available or not enabled (check
%s
)'
%
IP_FORWARD_FILE
)
sys
.
exit
(
1
)
try
:
with
open
(
CONNTRACK_ACCT_FILE
,
'w'
)
as
acct_file
:
acct_file
.
write
(
'1'
)
except
(
IOError
,
OSError
)
as
e
:
if
e
.
errno
!=
errno
.
ENOENT
:
log
.
critical
(
'Could not enable conntrack rule counters (check
%s
):
%s
'
%
(
CONNTRACK_ACCT_FILE
,
e
))
sys
.
exit
(
1
)
config_file
=
ConfigFile
(
mediaproxy
.
configuration_file
)
log
.
level
.
current
=
config_file
.
get_setting
(
'Relay'
,
'log_level'
,
type
=
datatypes
.
LogLevel
,
default
=
log
.
level
.
DEBUG
)
if
options
.
systemd
:
from
systemd.journal
import
JournalHandler
log
.
set_handler
(
JournalHandler
(
SYSLOG_IDENTIFIER
=
name
))
log
.
capture_output
()
elif
options
.
fork
:
try
:
process
.
daemonize
(
pidfile
=
'{}.pid'
.
format
(
name
))
except
ProcessError
as
e
:
log
.
critical
(
'Cannot start
%s
:
%s
'
%
(
fullname
,
e
))
sys
.
exit
(
1
)
log
.
use_syslog
(
name
)
log
.
info
(
'Starting
%s
%s
'
%
(
fullname
,
mediaproxy
.
__version__
))
try
:
process
.
wait_for_network
(
wait_time
=
10
,
wait_message
=
'Waiting for network to become available...'
)
except
KeyboardInterrupt
:
sys
.
exit
(
0
)
except
RuntimeError
as
e
:
log
.
critical
(
'Cannot start
%s
:
%s
'
%
(
fullname
,
e
))
sys
.
exit
(
1
)
try
:
from
mediaproxy.relay
import
MediaRelay
if
options
.
debug
:
log
.
level
.
current
=
log
.
level
.
DEBUG
if
options
.
debug_memory
:
from
application.debug.memory
import
memory_dump
relay
=
MediaRelay
()
except
Exception
as
e
:
log
.
critical
(
'Failed to create
%s
:
%s
'
%
(
fullname
,
e
))
if
type
(
e
)
is
not
RuntimeError
:
log
.
exception
()
sys
.
exit
(
1
)
relay
.
run
()
if
options
.
debug_memory
:
memory_dump
()
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Sat, Nov 23, 2:19 PM (22 h, 47 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3409271
Default Alt Text
media-relay (4 KB)
Attached To
Mode
rMP Mediaproxy
Attached
Detach File
Event Timeline
Log In to Comment