mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-16 00:09:01 +03:00
feat(web-info): в секции ошибок только error и выше + путь к журналу
Печатались последние 5 строк журнала как есть, поэтому секция «Последние ошибки» показывала notice старта, а на Windows ещё и штатный шум winnt_accept — содержательные записи вытеснялись. Теперь фильтр по уровню error/crit/alert/emerg; AH02538 отсеивается отдельно как след нашего же рестарта Apache при публикации. Путь к журналу печатается всегда — за отсеянными уровнями и полным контекстом читается файл. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
88535a759b
commit
b8cbb0111a
@@ -47,10 +47,12 @@ powershell.exe -NoProfile -File "${CLAUDE_SKILL_DIR}/scripts/web-info.ps1" <па
|
|||||||
| `[WS HTTP OData]` | Что опубликовано для базы: SOAP-сервисы, HTTP-сервисы, стандартный OData |
|
| `[WS HTTP OData]` | Что опубликовано для базы: SOAP-сервисы, HTTP-сервисы, стандартный OData |
|
||||||
| `+ext` (`WS+ext`) | Публикуются и сервисы, поставляемые расширениями конфигурации |
|
| `+ext` (`WS+ext`) | Публикуются и сервисы, поставляемые расширениями конфигурации |
|
||||||
| `(нет публикаций)` | Apache стоит, но ни одна база не опубликована — нужен `/web-publish` |
|
| `(нет публикаций)` | Apache стоит, но ни одна база не опубликована — нужен `/web-publish` |
|
||||||
| `(пусто)` / `(нет файла)` в ошибках | Норма, а не сбой: журнал пуст или ещё не создан |
|
| `(ошибок нет)` / `(нет файла)` | Норма, а не сбой: ошибок в журнале нет или он ещё не создан |
|
||||||
|
|
||||||
Секция ошибок — последние строки журнала Apache, в том числе информационные (`notice` при старте).
|
Секция ошибок — последние 5 записей уровня `error` и выше. `notice` (строки старта), `warn`
|
||||||
Наличие строк само по себе о проблеме не говорит — смотри уровень (`error`, `warn`).
|
(штатный шум `winnt_accept` на Windows) и `AH02538` (след нашего же рестарта Apache) отсеиваются,
|
||||||
|
иначе они вытесняют содержательное. Записи могут быть давними — смотри дату в строке. Путь к
|
||||||
|
журналу печатается рядом: нужен полный контекст или отсеянные уровни — читай файл напрямую.
|
||||||
|
|
||||||
Публикация в списке не означает, что база отвечает: `/web-info` читает `httpd.conf` и дескрипторы,
|
Публикация в списке не означает, что база отвечает: `/web-info` читает `httpd.conf` и дескрипторы,
|
||||||
а не опрашивает URL-ы. Если нужно убедиться — дёрни URL.
|
а не опрашивает URL-ы. Если нужно убедиться — дёрни URL.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# web-info v1.1 — Apache & 1C publication status
|
# web-info v1.2 — Apache & 1C publication status
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
<#
|
<#
|
||||||
.SYNOPSIS
|
.SYNOPSIS
|
||||||
@@ -162,13 +162,18 @@ if (-not $errorLog -or -not (Test-Path $errorLog)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($errorLog -and (Test-Path $errorLog)) {
|
if ($errorLog -and (Test-Path $errorLog)) {
|
||||||
$lines = Get-Content $errorLog -Tail 5 -ErrorAction SilentlyContinue
|
Write-Host "Журнал: $errorLog" -ForegroundColor DarkGray
|
||||||
if ($lines -and $lines.Count -gt 0) {
|
# Только error и выше: warn забит штатным шумом winnt_accept, notice — строки старта.
|
||||||
|
# AH02538 — след нашего же рестарта (родитель убит), пишется как crit при каждой публикации
|
||||||
|
$lines = Get-Content $errorLog -ErrorAction SilentlyContinue |
|
||||||
|
Where-Object { $_ -match '\[[a-z_]+:(error|crit|alert|emerg)\]' -and $_ -notmatch 'AH02538' } |
|
||||||
|
Select-Object -Last 5
|
||||||
|
if ($lines) {
|
||||||
foreach ($line in $lines) {
|
foreach ($line in $lines) {
|
||||||
Write-Host " $line" -ForegroundColor DarkGray
|
Write-Host " $line" -ForegroundColor DarkGray
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Host "(пусто)" -ForegroundColor Green
|
Write-Host "(ошибок нет)" -ForegroundColor Green
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Host "(нет файла)" -ForegroundColor Green
|
Write-Host "(нет файла)" -ForegroundColor Green
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# web-info v1.1 — Apache & 1C publication status
|
# web-info v1.2 — Apache & 1C publication status
|
||||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -151,22 +151,28 @@ def main():
|
|||||||
m_log = re.search(r'(?m)^\s*ErrorLog\s+"?([^"\r\n]+)"?', conf_content)
|
m_log = re.search(r'(?m)^\s*ErrorLog\s+"?([^"\r\n]+)"?', conf_content)
|
||||||
if m_log:
|
if m_log:
|
||||||
log_path = m_log.group(1).strip()
|
log_path = m_log.group(1).strip()
|
||||||
error_log = log_path if os.path.isabs(log_path) else os.path.join(apache_path, log_path)
|
error_log = os.path.normpath(
|
||||||
|
log_path if os.path.isabs(log_path) else os.path.join(apache_path, log_path))
|
||||||
if not error_log or not os.path.exists(error_log):
|
if not error_log or not os.path.exists(error_log):
|
||||||
error_log = next((p for p in (os.path.join(apache_path, 'logs', n)
|
error_log = next((p for p in (os.path.join(apache_path, 'logs', n)
|
||||||
for n in ('error_log', 'error.log'))
|
for n in ('error_log', 'error.log'))
|
||||||
if os.path.exists(p)), None)
|
if os.path.exists(p)), None)
|
||||||
|
|
||||||
if error_log and os.path.exists(error_log):
|
if error_log and os.path.exists(error_log):
|
||||||
|
print(f'Журнал: {error_log}')
|
||||||
try:
|
try:
|
||||||
with open(error_log, 'r', encoding='utf-8-sig', errors='replace') as f:
|
with open(error_log, 'r', encoding='utf-8-sig', errors='replace') as f:
|
||||||
all_lines = f.readlines()
|
all_lines = f.readlines()
|
||||||
tail_lines = all_lines[-5:] if len(all_lines) >= 5 else all_lines
|
# Только error и выше: warn забит штатным шумом winnt_accept, notice — строки старта.
|
||||||
if tail_lines:
|
# AH02538 — след нашего же рестарта (родитель убит), пишется как crit при каждой публикации
|
||||||
for line in tail_lines:
|
err_lines = [ln for ln in all_lines
|
||||||
|
if re.search(r'\[[a-z_]+:(error|crit|alert|emerg)\]', ln)
|
||||||
|
and 'AH02538' not in ln]
|
||||||
|
if err_lines:
|
||||||
|
for line in err_lines[-5:]:
|
||||||
print(f' {line.rstrip()}')
|
print(f' {line.rstrip()}')
|
||||||
else:
|
else:
|
||||||
print('(пусто)')
|
print('(ошибок нет)')
|
||||||
except Exception:
|
except Exception:
|
||||||
print('(ошибка чтения)')
|
print('(ошибка чтения)')
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user