small-packages/luci-app-nvr/files/nvr/nvrcommon
2026-05-10 09:48:30 +08:00

171 lines
5.5 KiB
Bash
Executable File

#!/bin/sh
_source="$(uci get nvr.config.nvr_sourcelist)"
_directory="$(uci get nvr.config.storage_directory | sed 's/\/$//')"
_disk_name="$(uci get nvr.config.disk_name)"
_rec_time="$(uci get nvr.config.rec_time)"
_size="$(expr $(uci get nvr.config.storage_size) \* 1024)"
_total_days="$(uci get nvr.config.total_days)"
_loop_write="$(uci get nvr.config.loop_write)"
_fulldisk="$(uci get nvr.config.fulldisk)"
_disk_usage="$(echo $(uci get nvr.config.disk_usage) | cut -d '%' -f1)"
_enable_audio="$(uci get nvr.config.enable_audio)"
_all_clients=""
_disk=""
function detect_disk() {
if [ "$(df -hT | grep "${_disk_name}")" = "" ];then
_disk="X"
else
_disk=""
fi
}
function test_totaldays() {
_dir_nums="$(ls -l $_directory | grep "^d" | wc -l)"
if [ "$_total_days" -lt "$_dir_nums" ];then
_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
rm -rf $_directory/$_first_dir
fi
}
function count_filesize() {
_client_dir="$(ls -l $_directory/$_day_target | grep "^d" | awk '{print$9}')"
for c in $_client_dir;do
_single_filesize="$(ls -l $_directory/$_day_target/$c | head -n1 | awk '{print$5}')"
if [ "$_single_filesize" = "" ];then
_single_filesize=0
else
_single_filesize="$(expr $_single_filesize / 1024)"
fi
_nums_clientdir_file="$(ls -l $_directory/$_day_target/$c | grep "^-" | wc -l)"
_total_filesize="$(expr $_single_filesize \* $_nums_clientdir_file + $_total_filesize)"
done
}
function search_daydir_head() {
_day_target="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
count_filesize
}
function search_daydir_tail() {
_day_target="$(ls -l $_directory | grep "^d" | tail -n1 | awk '{print$9}')"
count_filesize
}
function search_daydir_midone() {
_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
count_filesize
}
function test_dir_space() {
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
_dir_space="$(expr $_size + 9999)"
else
_daydir_num="$(ls -l $_directory | grep "^d" | wc -l)"
if [ "$_daydir_num" -ge 3 ];then
_day_target="$(ls -l $_directory | grep "^d" | head -n2 | tail -n1 | awk '{print$9}')"
_mid_daydir_num="$(expr $_daydir_num - 2)"
search_daydir_midone
_total_filesize="$(expr $_total_filesize \* $_mid_daydir_num)"
search_daydir_head
search_daydir_tail
elif [ "$_daydir_num" -eq 2 ];then
search_daydir_head
search_daydir_tail
else
search_daydir_head
fi
_dir_space=$_total_filesize
fi
}
function test_loopwrite() {
if [ "$_loop_write" -eq 1 ];then
_total_filesize=0
if [ "$_fulldisk" -eq 1 ];then
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
_dir_space="$(expr $_size + 9999)"
else
_dir_space=1
fi
else
test_dir_space
fi
while [ "$_dir_space" -ge "$_size" ];do
_first_dir="$(ls -l $_directory | grep "^d" | head -n1 | awk '{print$9}')"
_action_dir="$(ls -l $_directory/$_first_dir | grep "^d" | awk '{print$9}')"
for i in $_action_dir;do
rm "$_directory/$_first_dir/$i/$(ls -l $_directory/$_first_dir/$i | grep "^-" | head -n1 | awk '{print$9}')"
if [ "$(ls -l $_directory/$_first_dir/$i | grep "^-")" = "" ];then
rm -rf $_directory/$_first_dir/$i
fi
if [ "$(ls -l $_directory | grep "^d" | wc -l )" -gt 1 ];then
if [ "$(du -s $_directory/$_first_dir | awk '{print$1}')" -le "$(expr $_totalnum \* 4 + 4)" ];then
rm -rf $_directory/$_first_dir
break
fi
fi
done
_total_filesize=0
if [ "$_fulldisk" -eq 1 ];then
if [ "$(df -h | grep $_disk_name | awk '{print$5}' | head -n 1 | cut -d '%' -f1)" -ge "$_disk_usage" ];then
_dir_space="$(expr $_size + 9999)"
else
_dir_space=1
fi
else
test_dir_space
fi
done
else
echo "do not test looping write!"
fi
}
case $_source in
hikvision)
_hik_user="$(uci get nvr.config.hik_user)"
_hik_pass="$(uci get nvr.config.hik_pass)"
if [ "$(uci get nvr.config.hik_list)" = "one-by-one" ];then
_all_clients=$(uci get nvr.config.hikpush)
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
else
_ipstart="$(uci get nvr.config.hik_batch_start)"
_ipend="$(uci get nvr.config.hik_batch_end)"
_startnum="$(echo $_ipstart | cut -d '.' -f4)"
_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
for i in $(seq 1 $_totalnum);do
_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
done
fi
;;
tplink)
_tplink_user="$(uci get nvr.config.tplink_user)"
_tplink_pass="$(uci get nvr.config.tplink_pass)"
if [ "$(uci get nvr.config.tplink_list)" = "one-by-one" ];then
_all_clients=$(uci get nvr.config.tplinkpush)
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
else
_ipstart="$(uci get nvr.config.tplink_batch_start)"
_ipend="$(uci get nvr.config.tplink_batch_end)"
_startnum="$(echo $_ipstart | cut -d '.' -f4)"
_totalnum=$(expr $(echo $_ipend | cut -d '.' -f4) - $(echo $_ipstart | cut -d '.' -f4) + 1)
for i in $(seq 1 $_totalnum);do
_all_clients="$_all_clients $(echo $_ipstart | sed 's/[0-9]*$//')$(expr $_startnum + $i - 1)"
done
fi
;;
rtmp-url)
_all_clients=$(uci get nvr.config.rtmppush)
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
;;
multiple-types)
_all_clients=$(uci get nvr.config.multipush)
_totalnum="$(echo $_all_clients | sed 's/ /\n/g' | wc -l)"
;;
none)
exit 0
;;
esac