@@ -1482,119 +1482,65 @@ func (app *App) loadFileLogs(logName string, newUpdate bool, g *gocui.Gui) {
1482
1482
} else {
1483
1483
// Читаем логи в системах UNIX (Linux/Darwin/*BSD)
1484
1484
switch {
1485
- // Читаем архивные логи (decompress + stdout) в формате gz
1486
- case strings .HasSuffix (logFullPath , ".gz" ):
1487
- cmdGzip := exec .Command ("gzip" , "-dc" , logFullPath )
1485
+ // Читаем архивные логи (unpack + stdout) в формате: gz/xz/bz2
1486
+ case strings .HasSuffix (logFullPath , ".gz" ) || strings .HasSuffix (logFullPath , ".xz" ) || strings .HasSuffix (logFullPath , ".bz2" ):
1487
+ var unpacker string
1488
+ vError , _ := app .gui .View ("logs" )
1489
+ switch {
1490
+ case strings .HasSuffix (logFullPath , ".gz" ):
1491
+ unpacker = "gzip"
1492
+ case strings .HasSuffix (logFullPath , ".xz" ):
1493
+ unpacker = "xz"
1494
+ case strings .HasSuffix (logFullPath , ".bz2" ):
1495
+ unpacker = "bzip2"
1496
+ }
1497
+ cmdZip := exec .Command (unpacker , "-dc" , logFullPath )
1488
1498
cmdTail := exec .Command ("tail" , "-n" , app .logViewCount )
1489
- pipe , err := cmdGzip .StdoutPipe ()
1499
+ pipe , err := cmdZip .StdoutPipe ()
1490
1500
if err != nil {
1491
- log .Fatalf ("Error creating pipe: %v" , err )
1501
+ vError .Clear ()
1502
+ fmt .Fprintln (vError , " \033 [31mError creating pipe for" , unpacker , "tool.\n " , err , "\033 [0m" )
1503
+ return
1492
1504
}
1493
- // Стандартный вывод gzip передаем в stdin tail
1505
+ // Стандартный вывод программы передаем в stdin tail
1494
1506
cmdTail .Stdin = pipe
1495
1507
out , err := cmdTail .StdoutPipe ()
1496
1508
if err != nil {
1497
- log .Fatalf ("Error creating stdout pipe for tail: %v" , err )
1509
+ vError .Clear ()
1510
+ fmt .Fprintln (vError , " \033 [31mError creating stdout pipe for tail.\n " , err , "\033 [0m" )
1511
+ return
1498
1512
}
1499
1513
// Запуск команд
1500
- if err := cmdGzip .Start (); err != nil {
1501
- log .Fatalf ("Error starting gzip: %v" , err )
1514
+ if err := cmdZip .Start (); err != nil {
1515
+ vError .Clear ()
1516
+ fmt .Fprintln (vError , " \033 [31mError starting" , unpacker , "tool.\n " , err , "\033 [0m" )
1517
+ return
1502
1518
}
1503
1519
if err := cmdTail .Start (); err != nil {
1504
- log .Fatalf ("Error starting tail: %v" , err )
1520
+ vError .Clear ()
1521
+ fmt .Fprintln (vError , " \033 [31mError starting tail from" , unpacker , "stdout.\n " , err , "\033 [0m" )
1522
+ return
1505
1523
}
1506
1524
// Чтение вывода
1507
1525
output , err := io .ReadAll (out )
1508
1526
if err != nil {
1509
- log .Fatalf ("Error reading output from tail: %v" , err )
1527
+ vError .Clear ()
1528
+ fmt .Fprintln (vError , " \033 [31mError reading output from tail.\n " , err , "\033 [0m" )
1529
+ return
1510
1530
}
1511
1531
// Ожидание завершения команд
1512
- if err := cmdGzip .Wait (); err != nil {
1513
- v , _ := app .gui .View ("logs" )
1514
- v .Clear ()
1515
- fmt .Fprintln (v , " \033 [31mError reading archive log using gzip tool.\n " , err , "\033 [0m" )
1532
+ if err := cmdZip .Wait (); err != nil {
1533
+ vError .Clear ()
1534
+ fmt .Fprintln (vError , " \033 [31mError reading archive log using" , unpacker , "tool.\n " , err , "\033 [0m" )
1516
1535
return
1517
1536
}
1518
1537
if err := cmdTail .Wait (); err != nil {
1519
- v , _ := app .gui .View ("logs" )
1520
- v .Clear ()
1521
- fmt .Fprintln (v , " \033 [31mError reading log using tail tool.\n " , err , "\033 [0m" )
1538
+ vError .Clear ()
1539
+ fmt .Fprintln (vError , " \033 [31mError reading log using tail tool.\n " , err , "\033 [0m" )
1522
1540
return
1523
1541
}
1524
1542
// Выводим содержимое
1525
1543
app .currentLogLines = strings .Split (string (output ), "\n " )
1526
- // Читаем архивные логи в формате xz
1527
- case strings .HasSuffix (logFullPath , ".xz" ):
1528
- cmdXz := exec .Command ("xz" , "-dc" , logFullPath )
1529
- cmdTail := exec .Command ("tail" , "-n" , app .logViewCount )
1530
- pipe , err := cmdXz .StdoutPipe ()
1531
- if err != nil {
1532
- log .Fatalf ("Error creating pipe: %v" , err )
1533
- }
1534
- cmdTail .Stdin = pipe
1535
- out , err := cmdTail .StdoutPipe ()
1536
- if err != nil {
1537
- log .Fatalf ("Error creating stdout pipe for tail: %v" , err )
1538
- }
1539
- if err := cmdXz .Start (); err != nil {
1540
- log .Fatalf ("Error starting xz: %v" , err )
1541
- }
1542
- if err := cmdTail .Start (); err != nil {
1543
- log .Fatalf ("Error starting tail: %v" , err )
1544
- }
1545
- output , err := io .ReadAll (out )
1546
- if err != nil {
1547
- log .Fatalf ("Error reading output from tail: %v" , err )
1548
- }
1549
- if err := cmdXz .Wait (); err != nil {
1550
- v , _ := app .gui .View ("logs" )
1551
- v .Clear ()
1552
- fmt .Fprintln (v , " \033 [31mError reading archive log using xz tool.\n " , err , "\033 [0m" )
1553
- return
1554
- }
1555
- if err := cmdTail .Wait (); err != nil {
1556
- v , _ := app .gui .View ("logs" )
1557
- v .Clear ()
1558
- fmt .Fprintln (v , " \033 [31mError reading log using tail tool.\n " , err , "\033 [0m" )
1559
- return
1560
- }
1561
- app .currentLogLines = strings .Split (string (output ), "\n " )
1562
- // Читаем архивные логи в формате bz2 для FreeBSD
1563
- case strings .HasSuffix (logFullPath , ".bz2" ):
1564
- cmdBzip2 := exec .Command ("bzip2" , "-dc" , logFullPath )
1565
- cmdTail := exec .Command ("tail" , "-n" , app .logViewCount )
1566
- pipe , err := cmdBzip2 .StdoutPipe ()
1567
- if err != nil {
1568
- log .Fatalf ("Error creating pipe: %v" , err )
1569
- }
1570
- cmdTail .Stdin = pipe
1571
- out , err := cmdTail .StdoutPipe ()
1572
- if err != nil {
1573
- log .Fatalf ("Error creating stdout pipe for tail: %v" , err )
1574
- }
1575
- if err := cmdBzip2 .Start (); err != nil {
1576
- log .Fatalf ("Error starting bzip2: %v" , err )
1577
- }
1578
- if err := cmdTail .Start (); err != nil {
1579
- log .Fatalf ("Error starting tail: %v" , err )
1580
- }
1581
- output , err := io .ReadAll (out )
1582
- if err != nil {
1583
- log .Fatalf ("Error reading output from tail: %v" , err )
1584
- }
1585
- if err := cmdBzip2 .Wait (); err != nil {
1586
- v , _ := app .gui .View ("logs" )
1587
- v .Clear ()
1588
- fmt .Fprintln (v , " \033 [31mError reading archive log using bzip2 tool.\n " , err , "\033 [0m" )
1589
- return
1590
- }
1591
- if err := cmdTail .Wait (); err != nil {
1592
- v , _ := app .gui .View ("logs" )
1593
- v .Clear ()
1594
- fmt .Fprintln (v , " \033 [31mError reading log using tail tool.\n " , err , "\033 [0m" )
1595
- return
1596
- }
1597
- app .currentLogLines = strings .Split (string (output ), "\n " )
1598
1544
// Читаем бинарные файлы с помощью last/lastb для wtmp/btmp, а также utmp (OpenBSD) и utx.log (FreeBSD)
1599
1545
case strings .Contains (logFullPath , "wtmp" ) || strings .Contains (logFullPath , "utmp" ) || strings .Contains (logFullPath , "utx.log" ):
1600
1546
cmd := exec .Command ("last" , "-f" , logFullPath )
@@ -2490,6 +2436,14 @@ func (app *App) wordColor(inputWord string) string {
2490
2436
break
2491
2437
}
2492
2438
}
2439
+ case strings .Contains (inputWordLower , "cancel" ):
2440
+ words := []string {"cancellation" , "cancelation" , "canceled" , "cancelling" , "canceling" , "cancel" }
2441
+ for _ , word := range words {
2442
+ if strings .Contains (inputWordLower , word ) {
2443
+ coloredWord = app .replaceWordLower (inputWord , word , "\033 [31m" )
2444
+ break
2445
+ }
2446
+ }
2493
2447
case strings .Contains (inputWordLower , "unavailable" ):
2494
2448
coloredWord = app .replaceWordLower (inputWord , "unavailable" , "\033 [31m" )
2495
2449
case strings .Contains (inputWordLower , "unsuccessful" ):
0 commit comments