Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#!/bin/bash # ================================================================== # Проверка дублей отправок чеков в ФНС по логам redis-cli MONITOR # Linux / CentOS версия — ультрабыстрая, потоковая, без Python # Работает с файлами любого размера (10 МБ → 200 ГБ) и с пайпом # ================================================================== echo echo "Поиск дублей отправок в ФНС (tax_sent_* SETEX \"93600\" \"sent\") ..." echo if [[ -z "$1" || "$1" == "-" ]]; then INPUT="cat" echo "Чтение из stdin (можно запустить: redis-cli MONITOR | $0)" else if [[ ! -f "$1" ]]; then echo "ОШИБКА: файл не найден: $1" exit 1 fi INPUT="cat \"$1\"" echo "Обрабатывается файл: $1" fi echo "Запущен: $(date '+%Y-%m-%d %H:%M:%S')" echo # Потоковая магия: вытаскиваем ключ tax_sent_... и сразу считаем статистику eval "$INPUT" | \ stdbuf -oL grep -E '"SETEX" "tax_sent_' | \ stdbuf -oL sed -n 's/.*"SETEX" "tax_sent_\([^"]*\)".*/tax_sent_\1/p' | \ sort | \ uniq -c | \ sort -nr | \ awk ' BEGIN { total = 0; unique = 0; dups = 0; extra = 0; } { count = $1; $1 = ""; key = substr($0, 2); total += count; if (count > 1) { dups++; extra += (count - 1); dup_list = dup_list count "\t" key "\n"; } unique++; } END { if (unique == 0) coeff = "N/A"; else coeff = sprintf("%.5f", total / unique); print "\n================================================================================\n"; print " АНАЛИЗ ДУБЛЕЙ ОТПРАВОК В ФНС ЗАВЕРШЁН\n"; print "================================================================================\n"; printf "Всего операций SETEX tax_sent_* : %15s\n", total + 0; printf "Уникальных чеков : %15s\n", unique; printf "Чеков, отправленных >1 раза : %15s\n", dups; printf "Лишних отправок в ФНС (дубли) : %15s\n", extra; printf "Коэффициент дублей : %15s x\n", coeff; print "================================================================================\n"; if (dups == 0) { print "\nДУБЛЕЙ ОТПРАВОК В ФНС НЕТ — БЛОКИРОВКА РАБОТАЕТ ИДЕАЛЬНО!\n"; } else { print "\nОБНАРУЖЕНО " dups " чеков с дублями отправки в ФНС!\n"; print "ТОП-20 чеков с наибольшим количеством отправок:"; print "Повторов Ключ"; print "--------------------------------------------------------------------------------"; n = split(dup_list, arr, "\n"); asort(arr); for (i = n; i >= n-19 && i >= 1; i--) { if (arr[i] != "") print arr[i]; } print "\nВсе дубли (" dups " шт.) сохранены в fns_duplicates.txt"; print dup_list > "fns_duplicates.txt"; } } ' echo echo "Готово: $(date '+%Y-%m-%d %H:%M:%S')" echo
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)