Begin X4 prototype
[khatus.git] / x4 / bin / khatus_x4_lib_common_sensor.sh
CommitLineData
4411059d
SK
1#! /bin/bash
2
3set -e
4
5# Defaults
6prefix='/dev/shm/khatus'
7host="$(hostname)"
8sensor="$(basename $0)"
9run_in='foreground' # foreground | background
10run_as='poller' # poller | streamer
11interval=1 # Only relevant if run_as poller, ignored otherwise.
12
13set_common_options() {
14 while :
15 do
16 case "$1"
17 in '')
18 break
19 ;; -d|--daemon)
20 run_in='background'
21 shift 1
22 ;; -i|--interval)
23 case "$2"
24 in '')
25 printf "Option $1 requires and argument\n" >&2
26 exit 1
27 ;; *)
28 interval="$2"
29 shift 2
30 esac
31 ;; *)
32 shift 1
33 esac
34 done
35}
36
37init_dirs() {
38 work_dir="${prefix}/${host}/${sensor}"
39 out_dir="${work_dir}/out"
40 err_file="${work_dir}/err"
41 pid_file="${work_dir}/pid"
42
43 mkdir -p "$out_dir"
44}
45
46streamer() {
47 sensor \
48 | while read key val
49 do
50 printf "%s\n" "$val" > "${out_dir}/${key}"
51 done
52 >> "$err_file"
53}
54
55poller() {
56 while :
57 do
58 streamer
59 sleep "$interval"
60 done
61}
62
63pid_file_create_of_parent() {
64 printf "$$\n" > "$pid_file"
65}
66
67pid_file_create_of_child() {
68 printf "$!\n" > "$pid_file"
69}
70
71pid_file_test() {
72 if test -e "$pid_file"
73 then
74 printf "Error - $sensor already running (i.e. PID file exists at $pid_file)\n" 1>&2
75 exit 1
76 fi
77}
78
79pid_file_remove() {
80 rm -f "$pid_file"
81}
82
83run_in_foreground() {
84 # TODO: Why do INT and EXIT traps only work in combination?
85 trap true INT
86 trap exit TERM
87 trap pid_file_remove EXIT
88 $run_as
89}
90
91run_in_background_2nd_fork() {
92 run_in_foreground &
93 pid_file_create_of_child
94}
95
96run_in_background() {
97 run_in_background_2nd_fork &
98}
99
100run() {
101 case "$run_as"
102 in 'poller' | 'streamer')
103 true
104 ;; *)
105 printf "Error - illegal value for \$run_as: $run_in\n" 1>&2
106 exit 1
107 esac
108 pid_file_test
109 case "$run_in"
110 in 'background')
111 run_in_background
112 ;; 'foreground')
113 pid_file_create_of_parent
114 run_in_foreground
115 ;; *)
116 printf "Error - illegal value for \$run_in: $run_in\n" 1>&2
117 exit 1
118 esac
119}
120
121set_common_options $@
122init_dirs
This page took 0.032049 seconds and 4 git commands to generate.