feat: russify the entire log, keep system errors in English
This commit is contained in:
1 parent
c0a47bc99b
commit
161981137d
2 files changed
+40
-40
No files matched your search
@@ -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 │
|
||||||
└────────────────────────────────────────────────────────────────────┘
|
└────────────────────────────────────────────────────────────────────┘
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in new issue
Block a user