blob: e448456ec5efea6b667eb80be16fec076c826e6f [file] [log] [blame]
Mark Salyzyn100658c2015-05-26 14:57:13 -07001#! /system/bin/sh
Mark Salyzyn2e210e42016-04-12 14:35:27 -07002# logpersist cat, start and stop handlers
Mark Salyzyn1b9456a2015-09-21 10:45:10 -07003progname="${0##*/}"
Mark Salyzynd1f41d62016-02-09 15:49:29 -08004case `getprop ro.debuggable` in
51) ;;
Mark Salyzyn1b9456a2015-09-21 10:45:10 -07006*) echo "${progname} - Permission denied"
7 exit 1
8 ;;
9esac
Mark Salyzyn2e210e42016-04-12 14:35:27 -070010
Mark Salyzyn100658c2015-05-26 14:57:13 -070011data=/data/misc/logd
12property=persist.logd.logpersistd
13service=logcatd
Mark Salyzyn2e210e42016-04-12 14:35:27 -070014size_default=256
15buffer_default=all
16args="${@}"
17
18size=${size_default}
19buffer=${buffer_default}
20clear=false
21while [ ${#} -gt 0 ]; do
22 case ${1} in
23 -c|--clear) clear=true ;;
24 --size=*) size="${1#--size=}" ;;
25 --rotate-count=*) size="${1#--rotate-count=}" ;;
26 -n|--size|--rotate-count) size="${2}" ; shift ;;
27 --buffer=*) buffer="${1#--buffer=}" ;;
28 -b|--buffer) buffer="${2}" ; shift ;;
29 -h|--help|*)
30 LEAD_SPACE_="`echo ${progname%.*} | tr '[ -~]' ' '`"
31 echo "${progname%.*}.cat - dump current ${service%d} logs"
32 echo "${progname%.*}.start [--size=<size_in_kb>] [--buffer=<buffers>] [--clear]"
33 echo "${LEAD_SPACE_} - start ${service} service"
34 echo "${progname%.*}.stop [--clear] - stop ${service} service"
35 case ${1} in
36 -h|--help) exit 0 ;;
37 *) echo ERROR: bad argument ${@} >&2 ; exit 1 ;;
38 esac
39 ;;
40 esac
41 shift
42done
43
44if [ -z "${size}" -o "${size_default}" = "${size}" ]; then
45 unset size
Mark Salyzyn100658c2015-05-26 14:57:13 -070046fi
Mark Salyzyn2e210e42016-04-12 14:35:27 -070047if [ -n "${size}" ] &&
48 ! ( [ 0 -lt "${size}" ] && [ 2048 -ge "${size}" ] ) >/dev/null 2>&1; then
49 echo ERROR: Invalid --size ${size} >&2
50 exit 1
51fi
52if [ -z "${buffer}" -o "${buffer_default}" = "${buffer}" ]; then
53 unset buffer
54fi
55if [ -n "${buffer}" ] && ! logcat -b ${buffer} -g >/dev/null 2>&1; then
56 echo ERROR: Invalid --buffer ${buffer} >&2
57 exit 1
58fi
59
Mark Salyzyn100658c2015-05-26 14:57:13 -070060case ${progname} in
61*.cat)
Mark Salyzyn2e210e42016-04-12 14:35:27 -070062 if [ -n "${size}${buffer}" -o "true" = "${clear}" ]; then
63 echo WARNING: Can not use --clear, --size or --buffer with ${progname%.*}.cat >&2
64 fi
65 su logd ls "${data}" |
Mark Salyzyn100658c2015-05-26 14:57:13 -070066 tr -d '\r' |
67 sort -ru |
68 sed "s#^#${data}/#" |
Mark Salyzyn2e210e42016-04-12 14:35:27 -070069 su logd xargs cat
Mark Salyzyn100658c2015-05-26 14:57:13 -070070 ;;
71*.start)
Mark Salyzyn2e210e42016-04-12 14:35:27 -070072 current_buffer="`getprop ${property}.buffer`"
73 current_size="`getprop ${property}.size`"
74 if [ "${service}" = "`getprop ${property}`" ]; then
75 if [ "true" = "${clear}" ]; then
76 su root stop ${service}
77 su root setprop ${property} ""
78 # 20ms done, guarantees content stop before rm
79 sleep 1
80 elif [ "${buffer}|${size}" != "${current_buffer}|${current_size}" ]; then
81 echo "ERROR: Changing existing collection parameters from" >&2
82 if [ "${buffer}" != "${current_buffer}" ]; then
83 a=${current_buffer}
84 b=${buffer}
85 if [ -z "${a}" ]; then a="${default_buffer}"; fi
86 if [ -z "${b}" ]; then b="${default_buffer}"; fi
87 echo " --buffer ${a} to ${b}" >&2
88 fi
89 if [ "${size}" != "${current_size}" ]; then
90 a=${current_size}
91 b=${size}
92 if [ -z "${a}" ]; then a="${default_size}"; fi
93 if [ -z "${b}" ]; then b="${default_size}"; fi
94 echo " --size ${a} to ${b}" >&2
95 fi
96 echo " Are you sure you want to do this?" >&2
97 echo " Suggest add --clear to erase data and restart with new settings." >&2
98 echo " To blindly override and retain data, ${progname%.*}.stop first." >&2
99 exit 1
100 fi
101 fi
102 if [ "true" = "${clear}" ]; then
103 su logd,misc rm -rf "${data}"
104 fi
105 if [ -n "${buffer}${current_buffer}" ]; then
106 su root setprop ${property}.buffer "${buffer}"
107 fi
108 if [ -n "${size}${current_size}" ]; then
109 su root setprop ${property}.size "${size}"
110 fi
111 # ${service}.rc does the heavy lifting with the following trigger
112 su root setprop ${property} ${service}
Mark Salyzyn100658c2015-05-26 14:57:13 -0700113 getprop ${property}
Mark Salyzyn2e210e42016-04-12 14:35:27 -0700114 # 20ms done, to permit process feedback check
Mark Salyzyn100658c2015-05-26 14:57:13 -0700115 sleep 1
Mark Salyzyn2e210e42016-04-12 14:35:27 -0700116 # also generate an error return code if not found running, bonus
Mark Salyzyn100658c2015-05-26 14:57:13 -0700117 ps -t | grep "${data##*/}.*${service%d}"
118 ;;
119*.stop)
Mark Salyzyn2e210e42016-04-12 14:35:27 -0700120 if [ -n "${size}${buffer}" ]; then
121 echo "WARNING: Can not use --size or --buffer with ${progname%.*}.stop" >&2
122 fi
123 su root stop ${service}
124 su root setprop ${property} ""
125 if [ -n "`getprop ${property}.buffer`" ]; then
126 su root setprop ${property}.buffer ""
127 fi
128 if [ -n "`getprop ${property}.size`" ]; then
129 su root setprop ${property}.size ""
130 fi
131 if [ "true" = "${clear}" ]; then
132 # 20ms done, guarantees content stop before rm
133 sleep 1
134 su logd,misc rm -rf "${data}"
135 fi
Mark Salyzyn100658c2015-05-26 14:57:13 -0700136 ;;
137*)
Mark Salyzyn2e210e42016-04-12 14:35:27 -0700138 echo "ERROR: Unexpected command ${0##*/} ${args}" >&2
Mark Salyzyn100658c2015-05-26 14:57:13 -0700139 exit 1
140esac