1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
require_once dirname(__DIR__, 3).DIRECTORY_SEPARATOR.'bootstrap/autoload.php'; |
4
|
|
|
|
5
|
|
|
use App\Models\Collection; |
6
|
|
|
use App\Models\Settings; |
7
|
|
|
use Blacklight\ColorCLI; |
8
|
|
|
use Blacklight\utility\Utility; |
9
|
|
|
use Illuminate\Support\Facades\DB; |
10
|
|
|
|
11
|
|
|
$DIR = NN_TMUX; |
12
|
|
|
$import = Settings::settingValue('site.tmux.import') ?? 0; |
13
|
|
|
$tmux_session = Settings::settingValue('site.tmux.tmux_session') ?? 0; |
14
|
|
|
$seq = Settings::settingValue('site.tmux.sequential') ?? 0; |
15
|
|
|
$delaytimet = Settings::settingValue('..delaytime'); |
16
|
|
|
$delaytimet = $delaytimet ? (int) $delaytimet : 2; |
|
|
|
|
17
|
|
|
$colorCli = new ColorCLI(); |
18
|
|
|
|
19
|
|
|
Utility::clearScreen(); |
20
|
|
|
|
21
|
|
|
echo 'Starting Tmux...'.PHP_EOL; |
22
|
|
|
|
23
|
|
|
//check if session exists |
24
|
|
|
$session = shell_exec("tmux list-session | grep $tmux_session"); |
25
|
|
|
if ($session !== null) { |
26
|
|
|
$colorCli->error("tmux session: '".$tmux_session."' is already running, aborting."); |
27
|
|
|
exit(); |
28
|
|
|
} |
29
|
|
|
|
30
|
|
|
//reset collections dateadded to now if dateadded > delay time check |
31
|
|
|
$colorCli->header('Resetting expired collections dateadded to now. This could take some time if many collections need to be reset'); |
32
|
|
|
|
33
|
|
|
Collection::query()->where('dateadded', '<', now()->subHours($delaytimet))->update(['dateadded' => now()]); |
34
|
|
|
|
35
|
|
|
function writelog($pane) |
36
|
|
|
{ |
37
|
|
|
$path = NN_RES.'logs'; |
38
|
|
|
$getdate = gmdate('Ymd'); |
39
|
|
|
$logs = Settings::settingValue('site.tmux.write_logs'); |
40
|
|
|
if ((int) $logs === 1) { |
41
|
|
|
return "2>&1 | tee -a $path/$pane-$getdate.log"; |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
return ''; |
45
|
|
|
} |
46
|
|
|
|
47
|
|
|
function command_exist($cmd) |
48
|
|
|
{ |
49
|
|
|
$returnVal = exec("which $cmd 2>/dev/null"); |
50
|
|
|
|
51
|
|
|
return ! empty($returnVal); |
52
|
|
|
} |
53
|
|
|
|
54
|
|
|
//check for apps |
55
|
|
|
$apps = ['time', 'tmux', 'nice', 'tee']; |
56
|
|
|
foreach ($apps as &$value) { |
57
|
|
|
if (! command_exist($value)) { |
58
|
|
|
$colorCli->error('Tmux scripts require '.$value.' but its not installed. Aborting.'); |
59
|
|
|
exit(); |
60
|
|
|
} |
61
|
|
|
} |
62
|
|
|
|
63
|
|
|
unset($value); |
64
|
|
|
|
65
|
|
|
function start_apps($tmux_session) |
66
|
|
|
{ |
67
|
|
|
$htop = Settings::settingValue('site.tmux.htop'); |
68
|
|
|
$vnstat = Settings::settingValue('site.tmux.vnstat'); |
69
|
|
|
$vnstat_args = Settings::settingValue('site.tmux.vnstat_args'); |
70
|
|
|
$tcptrack = Settings::settingValue('site.tmux.tcptrack'); |
71
|
|
|
$tcptrack_args = Settings::settingValue('site.tmux.tcptrack_args'); |
72
|
|
|
$nmon = Settings::settingValue('site.tmux.nmon'); |
73
|
|
|
$bwmng = Settings::settingValue('site.tmux.bwmng'); |
74
|
|
|
$mytop = Settings::settingValue('site.tmux.mytop'); |
75
|
|
|
$redis = Settings::settingValue('site.tmux.redis'); |
76
|
|
|
$showprocesslist = Settings::settingValue('site.tmux.showprocesslist'); |
77
|
|
|
$processupdate = Settings::settingValue('site.tmux.processupdate'); |
78
|
|
|
$console_bash = Settings::settingValue('site.tmux.console'); |
79
|
|
|
|
80
|
|
|
if ((int) $htop === 1 && command_exist('htop')) { |
81
|
|
|
exec("tmux new-window -t $tmux_session -n htop 'printf \"\033]2;htop\033\" && htop'"); |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
if ((int) $nmon === 1 && command_exist('nmon')) { |
85
|
|
|
exec("tmux new-window -t $tmux_session -n nmon 'printf \"\033]2;nmon\033\" && nmon -t'"); |
86
|
|
|
} |
87
|
|
|
|
88
|
|
|
if ((int) $vnstat === 1 && command_exist('vnstat')) { |
89
|
|
|
exec("tmux new-window -t $tmux_session -n vnstat 'printf \"\033]2;vnstat\033\" && watch -n10 \"vnstat ${vnstat_args}\"'"); |
90
|
|
|
} |
91
|
|
|
|
92
|
|
|
if ((int) $tcptrack === 1 && command_exist('tcptrack')) { |
93
|
|
|
exec("tmux new-window -t $tmux_session -n tcptrack 'printf \"\033]2;tcptrack\033\" && tcptrack ${tcptrack_args}'"); |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
if ((int) $bwmng === 1 && command_exist('bwm-ng')) { |
97
|
|
|
exec("tmux new-window -t $tmux_session -n bwm-ng 'printf \"\033]2;bwm-ng\033\" && bwm-ng'"); |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
if ((int) $mytop === 1 && command_exist('mytop')) { |
101
|
|
|
exec("tmux new-window -t $tmux_session -n mytop 'printf \"\033]2;mytop\033\" && mytop -u'"); |
102
|
|
|
} |
103
|
|
|
|
104
|
|
|
if ((int) $redis === 1 && command_exist('redis-cli')) { |
105
|
|
|
exec("tmux new-window -t $tmux_session -n redis-stat 'printf \"\033]2;redis-stat\033\" && redis-stat --verbose --server=63790'"); |
106
|
|
|
} |
107
|
|
|
|
108
|
|
|
if ((int) $showprocesslist === 1) { |
109
|
|
|
exec("tmux new-window -t $tmux_session -n showprocesslist 'printf \"\033]2;showprocesslist\033\" && watch -n .5 \"mysql -e \\\"SELECT time, state, info FROM information_schema.processlist WHERE command != \\\\\\\"Sleep\\\\\\\" AND time >= $processupdate ORDER BY time DESC \\\G\\\"\"'"); |
110
|
|
|
} |
111
|
|
|
|
112
|
|
|
if ((int) $console_bash === 1) { |
113
|
|
|
exec("tmux new-window -t $tmux_session -n bash 'printf \"\033]2;Bash\033\" && bash -i'"); |
114
|
|
|
} |
115
|
|
|
} |
116
|
|
|
|
117
|
|
|
function window_utilities($tmux_session) |
118
|
|
|
{ |
119
|
|
|
exec("tmux new-window -t $tmux_session -n utils 'printf \"\033]2;fixReleaseNames\033\"'"); |
120
|
|
|
exec("tmux splitw -t $tmux_session:1 -v -p 50 'printf \"\033]2;updateTVandTheaters\033\"'"); |
121
|
|
|
exec("tmux selectp -t $tmux_session:1.0; tmux splitw -t $tmux_session:1 -h -p 50 'printf \"\033]2;removeCrapReleases\033\"'"); |
122
|
|
|
exec("tmux selectp -t $tmux_session:1.2; tmux splitw -t $tmux_session:1 -h -p 50 'printf \"\033]2;decryptHashes\033\"'"); |
123
|
|
|
} |
124
|
|
|
|
125
|
|
|
function window_stripped_utilities($tmux_session) |
126
|
|
|
{ |
127
|
|
|
exec("tmux new-window -t $tmux_session -n utils 'printf \"\033]2;updateTVandTheaters\033\"'"); |
128
|
|
|
exec("tmux selectp -t $tmux_session:1.0; tmux splitw -t $tmux_session:1 -h -p 50 'printf \"\033]2;postprocessing_amazon\033\"'"); |
129
|
|
|
} |
130
|
|
|
|
131
|
|
|
function window_ircscraper($tmux_session) |
132
|
|
|
{ |
133
|
|
|
exec("tmux new-window -t $tmux_session -n IRCScraper 'printf \"\033]2;scrapeIRC\033\"'"); |
134
|
|
|
} |
135
|
|
|
|
136
|
|
|
function window_post($tmux_session) |
137
|
|
|
{ |
138
|
|
|
exec("tmux new-window -t $tmux_session -n post 'printf \"\033]2;postprocessing_additional\033\"'"); |
139
|
|
|
exec("tmux splitw -t $tmux_session:2 -v -p 67 'printf \"\033]2;postprocessing_non_amazon\033\"'"); |
140
|
|
|
exec("tmux splitw -t $tmux_session:2 -v -p 50 'printf \"\033]2;postprocessing_amazon\033\"'"); |
141
|
|
|
} |
142
|
|
|
|
143
|
|
|
function window_optimize($tmux_session) |
144
|
|
|
{ |
145
|
|
|
exec("tmux new-window -t $tmux_session -n optimize 'printf \"\033]2;update_Tmux\033\"'"); |
146
|
|
|
exec("tmux splitw -t $tmux_session:3 -v -p 50 'printf \"\033]2;optimize\033\"'"); |
147
|
|
|
} |
148
|
|
|
|
149
|
|
|
function attach($DIR, $tmux_session) |
150
|
|
|
{ |
151
|
|
|
exec("tmux respawnp -t $tmux_session:0.0 'php ".$DIR."monitor.php'"); |
152
|
|
|
exec("tmux select-window -t $tmux_session:0; tmux attach-session -d -t $tmux_session"); |
153
|
|
|
} |
154
|
|
|
|
155
|
|
|
//create tmux session |
156
|
|
|
|
157
|
|
|
$tmuxconfig = $DIR.'tmux.conf'; |
158
|
|
|
|
159
|
|
|
if ((int) $seq === 1) { |
160
|
|
|
exec("cd ${DIR}; tmux -f $tmuxconfig new-session -d -s $tmux_session -n Monitor 'printf \"\033]2;\"Monitor\"\033\"'"); |
161
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -h -p 67 'printf \"\033]2;update_releases\033\"'"); |
162
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -v -p 25 'printf \"\033]2;nzb-import\033\"'"); |
163
|
|
|
|
164
|
|
|
window_utilities($tmux_session); |
165
|
|
|
window_post($tmux_session); |
166
|
|
|
window_ircscraper($tmux_session); |
167
|
|
|
start_apps($tmux_session); |
168
|
|
|
attach($DIR, $tmux_session); |
169
|
|
|
} elseif ((int) $seq === 2) { |
170
|
|
|
exec("cd ${DIR}; tmux -f $tmuxconfig new-session -d -s $tmux_session -n Monitor 'printf \"\033]2;\"Monitor\"\033\"'"); |
171
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -h -p 67 'printf \"\033]2;sequential\033\"'"); |
172
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -v -p 25 'printf \"\033]2;nzb-import\033\"'"); |
173
|
|
|
|
174
|
|
|
window_stripped_utilities($tmux_session); |
175
|
|
|
window_ircscraper($tmux_session); |
176
|
|
|
start_apps($tmux_session); |
177
|
|
|
attach($DIR, $tmux_session); |
178
|
|
|
} else { |
179
|
|
|
exec("cd ${DIR}; tmux -f $tmuxconfig new-session -d -s $tmux_session -n Monitor 'printf \"\033]2;Monitor\033\"'"); |
180
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -h -p 67 'printf \"\033]2;update_binaries\033\"'"); |
181
|
|
|
exec("tmux selectp -t $tmux_session:0.0; tmux splitw -t $tmux_session:0 -v -p 25 'printf \"\033]2;nzb-import\033\"'"); |
182
|
|
|
exec("tmux selectp -t $tmux_session:0.2; tmux splitw -t $tmux_session:0 -v -p 67 'printf \"\033]2;backfill\033\"'"); |
183
|
|
|
exec("tmux splitw -t $tmux_session -v -p 50 'printf \"\033]2;update_releases\033\"'"); |
184
|
|
|
|
185
|
|
|
window_utilities($tmux_session); |
186
|
|
|
window_post($tmux_session); |
187
|
|
|
window_ircscraper($tmux_session); |
188
|
|
|
start_apps($tmux_session); |
189
|
|
|
attach($DIR, $tmux_session); |
190
|
|
|
} |
191
|
|
|
|