feat: russify the entire log, keep system errors in English

This commit is contained in:
lzrdblzzrd committed 2026-10-04 20:20:28 +03:00
1 parent c0a47bc99b
commit 161981137d
2 files changed
+39 -39

No files matched your search

+12 -12
View File
@@ -39,33 +39,33 @@ autoPriority.exe -dry-run
## Журнал ## Журнал
События одного скана выводятся боксом во временной папке Windows: **`%TEMP%\autopriority.log`**. При каждом запуске файл очищается. Шапка подгоняется под самую длинную строку. Порядок групп строгий: PROMOTE -> DEMOTE -> SKIP -> BLOCK. Пустой скан ничего не пишет. События одного скана выводятся боксом во временной папке Windows: **`%TEMP%\autopriority.log`**. При каждом запуске файл очищается. Шапка подгоняется под самую длинную строку. Порядок групп строгий: ПРИОРИТЕТ ПОВЫШЕН -> ПРИОРИТЕТ ПОНИЖЕН -> ОШИБКА ЧТЕНИЯ -> ОШИБКА ЗАПИСИ. Пустой скан ничего не пишет.
```text ```text
┌─ 04.10.2026 19:33:39 ───────────────────────────────────────────────┐ ┌─ 04.10.2026 20:19:15 ──────────────────────────────────────────────────┐
├ GAME MODE ON — EoCApp.exe (PID 6200) RSS=2.2GB, NORMAL -> HIGH │ ├ ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН — EoCApp.exe (PID 6200) RSS=2.2GB, NORMAL -> HIGH│
│ │ │ │
├ DEMOTE │ ├ ПРИОРИТЕТ ПОНИЖЕН │
│ ├ Hermes.exe (PID 10220) RSS=166MB, ABOVE_NORMAL -> IDLE │ │ ├ Hermes.exe (PID 10220) RSS=166MB, ABOVE_NORMAL -> IDLE │
│ └ librewolf.exe (PID 6216) RSS=524MB, HIGH -> IDLE │ │ └ librewolf.exe (PID 6216) RSS=524MB, HIGH -> IDLE │
│ │ │ │
├ SKIP │ ├ ОШИБКА ЧТЕНИЯ │
│ └ csrss.exe (PID 524): OpenProcess(524) failed: Access is denied. │ │ └ csrss.exe (PID 524): OpenProcess(524) failed: Access is denied. │
│ │ │ │
├ BLOCK │ ├ ОШИБКА ЗАПИСИ │
│ └ winlogon.exe (PID 792): OpenProcess(792) failed: Access is denied. │ │ └ winlogon.exe (PID 792): OpenProcess(792) failed: Access is denied. │
└─────────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────────────┘
``` ```
Триггер игрового режима не дублируется в PROMOTE: его исход уже вписан в строку `GAME MODE ON` (`NORMAL -> HIGH`, `уже HIGH` или `в блоклисте`). Выключение режима — секция `GAME MODE OFF — восстановление`, восстановленные процессы идут в PROMOTE/DEMOTE как обычно. Триггер игрового режима не дублируется в повышении: его исход уже вписан в строку `ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН` (`NORMAL -> HIGH`, `уже HIGH` или `в блоклисте`). Выключение режима — секция `ИГРОВОЙ РЕЖИМ ВЫКЛЮЧЁН — восстановление`, восстановленные процессы идут в повышении/понижении как обычно.
Запуск программы оформлен отдельным боксом START: Запуск программы оформлен отдельным боксом ЗАПУСК:
```text ```text
┌─ 04.10.2026 19:58:36 ──────────────────────────────────────────────┐ ┌─ 04.10.2026 19:58:36 ──────────────────────────────────────────────┐
├ START │ ├ ЗАПУСК │
│ ├ started (mem=512MB, game-mem=2.0GB, interval=1m0s, dry-run=false)│ │ ├ запущен (mem=512MB, game-mem=2.0GB, interval=1m0s, dry-run=false)│
│ └ own priority set to IDLE │ │ └ собственный приоритет: IDLE │
└────────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────────┘
``` ```
+27 -27
View File
@@ -368,7 +368,7 @@ func (a *app) setPriority(p *procInfo, target uint32) error {
return err return err
} }
if created != p.Key.Created { if created != p.Key.Created {
return fmt.Errorf("process instance changed; refusing to write") return fmt.Errorf("экземпляр процесса сменился; запись отклонена")
} }
return setPrio(h, p.PID, target) return setPrio(h, p.PID, target)
} }
@@ -472,17 +472,17 @@ func (a *app) failed(s *processState, target uint32, err error) {
a.bufBlock = append(a.bufBlock, cleanDetail(detail)) a.bufBlock = append(a.bufBlock, cleanDetail(detail))
return return
} }
logf("BLOCK %s (повторов не будет)", detail) logf("ОШИБКА ЗАПИСИ: %s (без повторов)", detail)
} }
func actionName(hasGame bool, target uint32) string { func actionName(hasGame bool, target uint32) string {
if hasGame { if hasGame {
return "GAME" return "ИГРОВОЙ РЕЖИМ"
} }
if target == PriorityClassHigh { if target == PriorityClassHigh {
return "PROMOTE" return "ПРИОРИТЕТ ПОВЫШЕН"
} }
return "DEMOTE" return "ПРИОРИТЕТ ПОНИЖЕН"
} }
func (a *app) change(s *processState, target uint32, kind changeKind, hasGame bool) bool { func (a *app) change(s *processState, target uint32, kind changeKind, hasGame bool) bool {
@@ -505,7 +505,7 @@ func (a *app) change(s *processState, target uint32, kind changeKind, hasGame bo
return true return true
} }
if a.dryRun { if a.dryRun {
a.emitChange(hasGame, target, fmt.Sprintf("[DRY-RUN] %s (PID %d) RSS=%s, %s -> %s", a.emitChange(hasGame, target, fmt.Sprintf("[ПРОБНЫЙ ЗАПУСК] %s (PID %d) RSS=%s, %s -> %s",
s.info.Name, s.info.PID, s.info.Name, s.info.PID,
formatMemSize(s.info.RSS), prioName(current), prioName(target))) formatMemSize(s.info.RSS), prioName(current), prioName(target)))
return true return true
@@ -647,7 +647,7 @@ func (a *app) emitPromote(detail string) {
a.bufPromote = append(a.bufPromote, detail) a.bufPromote = append(a.bufPromote, detail)
return return
} }
logf("PROMOTE %s", detail) logf("ПРИОРИТЕТ ПОВЫШЕН: %s", detail)
} }
func (a *app) emitDemote(detail string) { func (a *app) emitDemote(detail string) {
@@ -656,7 +656,7 @@ func (a *app) emitDemote(detail string) {
a.bufDemote = append(a.bufDemote, detail) a.bufDemote = append(a.bufDemote, detail)
return return
} }
logf("DEMOTE %s", detail) logf("ПРИОРИТЕТ ПОНИЖЕН: %s", detail)
} }
func (a *app) emitSkip(detail string) { func (a *app) emitSkip(detail string) {
@@ -665,7 +665,7 @@ func (a *app) emitSkip(detail string) {
a.bufSkip = append(a.bufSkip, detail) a.bufSkip = append(a.bufSkip, detail)
return return
} }
logf("SKIP %s (повторов не будет)", detail) logf("ОШИБКА ЧТЕНИЯ: %s (без повторов)", detail)
} }
func (a *app) emitBlock(detail string) { func (a *app) emitBlock(detail string) {
@@ -674,7 +674,7 @@ func (a *app) emitBlock(detail string) {
a.bufBlock = append(a.bufBlock, detail) a.bufBlock = append(a.bufBlock, detail)
return return
} }
logf("BLOCK %s (повторов не будет)", detail) logf("ОШИБКА ЗАПИСИ: %s (без повторов)", detail)
} }
func (a *app) emitChange(hasGame bool, target uint32, detail string) { func (a *app) emitChange(hasGame bool, target uint32, detail string) {
@@ -700,7 +700,7 @@ func (a *app) emitChange(hasGame bool, target uint32, detail string) {
} }
// flushScan выводит события одного скана одним боксом. // flushScan выводит события одного скана одним боксом.
// Порядок групп строгий: PROMOTE -> DEMOTE -> SKIP -> BLOCK. // Порядок групп строгий: повышение -> понижение -> ошибки чтения -> ошибки записи.
type logGroup struct { type logGroup struct {
name string name string
rows []string rows []string
@@ -755,10 +755,10 @@ func (a *app) flushScan() {
head := a.gameHead head := a.gameHead
a.gameHead = "" a.gameHead = ""
groups := []logGroup{ groups := []logGroup{
{"PROMOTE", a.bufPromote}, {"ПРИОРИТЕТ ПОВЫШЕН", a.bufPromote},
{"DEMOTE", a.bufDemote}, {"ПРИОРИТЕТ ПОНИЖЕН", a.bufDemote},
{"SKIP", a.bufSkip}, {"ОШИБКА ЧТЕНИЯ", a.bufSkip},
{"BLOCK", a.bufBlock}, {"ОШИБКА ЗАПИСИ", a.bufBlock},
} }
a.bufPromote, a.bufDemote, a.bufSkip, a.bufBlock = nil, nil, nil, nil a.bufPromote, a.bufDemote, a.bufSkip, a.bufBlock = nil, nil, nil, nil
renderBox(head, groups) renderBox(head, groups)
@@ -792,7 +792,7 @@ func (a *app) scan() {
defer a.flushScan() defer a.flushScan()
entries, err := allProcs() entries, err := allProcs()
if err != nil { if err != nil {
logf("process scan error: %v", err) logf("ошибка снимка процессов: %v", err)
return return
} }
pids := make(map[uint32]bool, len(entries)) pids := make(map[uint32]bool, len(entries))
@@ -882,7 +882,7 @@ func (a *app) scan() {
if !a.anyOverlay() { if !a.anyOverlay() {
a.gameMode = false a.gameMode = false
if !a.offAnnounced { if !a.offAnnounced {
a.gameHead = "GAME MODE OFF — восстановление" a.gameHead = "ИГРОВОЙ РЕЖИМ ВЫКЛЮЧЁН — восстановление"
a.offAnnounced = true a.offAnnounced = true
} }
} else { } else {
@@ -917,9 +917,9 @@ func (a *app) scan() {
} }
if enteringGame { if enteringGame {
if len(a.triggerOutcomes) > 0 { if len(a.triggerOutcomes) > 0 {
a.gameHead = "GAME MODE ON — " + strings.Join(a.triggerOutcomes, "; ") a.gameHead = "ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН — " + strings.Join(a.triggerOutcomes, "; ")
} else { } else {
a.gameHead = "GAME MODE ON" a.gameHead = "ИГРОВОЙ РЕЖИМ ВКЛЮЧЁН"
} }
} }
a.releaseUnused() a.releaseUnused()
@@ -988,7 +988,7 @@ func (a *app) shutdown() {
} }
a.adoptInherited(live) a.adoptInherited(live)
} else { } else {
logf("final scan error: %v", err) logf("ошибка финального снимка: %v", err)
} }
unrestored := 0 unrestored := 0
for _, s := range a.ordered() { for _, s := range a.ordered() {
@@ -1026,7 +1026,7 @@ func (a *app) shutdown() {
} }
} }
if unrestored > 0 { if unrestored > 0 {
logf("warning: %d process priorities could not be restored", unrestored) logf("предупреждение: не восстановлены приоритеты %d процессов", unrestored)
} }
} }
for _, s := range a.states { for _, s := range a.states {
@@ -1094,7 +1094,7 @@ func main() {
fmt.Fprintln(logFile, s) fmt.Fprintln(logFile, s)
} }
startRows := []string{fmt.Sprintf("started (mem=%s, game-mem=%s, interval=%s, dry-run=%v)", startRows := []string{fmt.Sprintf("запущен (mem=%s, game-mem=%s, interval=%s, dry-run=%v)",
formatMemSize(mem), formatMemSize(gameMem), *interval, *dryRun)} formatMemSize(mem), formatMemSize(gameMem), *interval, *dryRun)}
if !*dryRun { if !*dryRun {
@@ -1105,18 +1105,18 @@ func main() {
closeH(h) closeH(h)
} }
if err != nil { if err != nil {
startRows = append(startRows, fmt.Sprintf("warning: could not set own priority to IDLE: %v", err)) startRows = append(startRows, fmt.Sprintf("предупреждение: не удалось установить собственный приоритет IDLE: %v", err))
} else { } else {
startRows = append(startRows, "own priority set to IDLE") startRows = append(startRows, "собственный приоритет: IDLE")
} }
} }
renderBox("", []logGroup{{"START", startRows}}) renderBox("", []logGroup{{"ЗАПУСК", startRows}})
a := newApp(mem, gameMem, *dryRun) a := newApp(mem, gameMem, *dryRun)
defer func() { defer func() {
a.shutdown() a.shutdown()
logf("autoPriority stopped") logf("autoPriority остановлен")
logFile.Sync() logFile.Sync()
}() }()
@@ -1130,7 +1130,7 @@ func main() {
for { for {
select { select {
case <-stop: case <-stop:
logf("received shutdown signal") logf("получен сигнал завершения")
return return
case <-ticker.C: case <-ticker.C:
a.scan() a.scan()