Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


пятница, 26 мая 2017 г.

SQUID, AWK и статистика

Итак, выяснилось, что какой-то специфичный анализатор лога, чтобы собирать ежедневную обобщенную статистику, мне не требуется.

Что нужно? Нужно посчитать, сколько всего трафика за сутки израсходовал тот или иной пользователь.

Решаем задачу наличными силами и подручными средствами. Лог сквида имеет вполне определенный формат, гугл в помощь. Мне нужны поля: передано байт (5), имя пользователя (8) и результат запроса (4). Ну и воспользуемся такой прелестью авка, как ассоциативные массивы. Дальше - просто копипаста рабочего скрипта.
MAWK давно не обновлялся, поэтому я явно указал интерпретатор GAWK.

#!/usr/bin/gawk -f
# usage:
# 1) get_sqlog.awk filename
# 2) cat filename|get_sqlog.awk

# Если нет пользователя или есть один из двух отлупов, то переходим к следующей строке
{if ($8 == "-" || $4 == "TCP_DENIED/407" || $4 == "TCP_DENIED/403") { next }
# Ассоциативные массивы, в качестве индекса - имя пользователя
# Сколько раз он нам попался
    ++occurrences[$8]
# Его трафик
    summary[$8]=summary[$8]+$5
}
END {
# Проходим по всем элементам массива и красиво печатаем их
# Переменная а принимает значения индексов, определенные во время анализа
for (a in occurences){
    printf "%-30s:%10d:%10d\n",a,occurrences[a],summary[a]
    }
}

Под катом подробное описание.

среда, 24 мая 2017 г.

SQUID: вывод лога в человеческом виде

Ищу нормальный анализатор лога, который не будет рисовать красивые html-картинки, а просто тупо подобьет бабки и выдаст статистику за нужный период в разрезе пользователей.

Не нашел. Пока изучаю побочные действия и буду рисовать сам. Когда-то я уже приводил чью-то идею о преобразовании даты в логе в человеческий вид. Довольно известная "шутка" на Perl.

Но awk мне как-то милее.

awk '{ print strftime("%Y-%m-%d %H:%M:%S",$1)","$2","$5","$8}' имя_логфайла

Печатает дату и время в европейском формате,чего-то непонятное, объем данных, имя пользователя. Что мне и надо.

Да, работает это только с gawk. А mawk почему-то заявляет, что у него нет функции strftime.

вторник, 2 мая 2017 г.

MS DOS: Обращение к счетчику цикла изнутри самого цикла

Как ни крути, а cmd.exe и command.com - это останки MS DOS, поэтому я так и озаглавил эту запись.

Итак, server 2008, cmd.exe, батник, цикл... Что я хочу сделать? Я хочу вывести числа от 1 до 20, причем числа меньше 10 должны выводиться с ведущими нулями. Способов для этого много, но все они упираются в присвоение какой-то переменной текущего значения счетчика цикла.
Чтобы не мудрить с проверками, я решил использовать наиболее универсальный способ: прибавляю к числу 100 и из полученного значения беру 2 правых символа. Можно прибавлять что угодно, главное, чтобы справа было нужное число нулей, чтобы не исказить само значение.

for /L %%a in (1,1,20) do (
  set /A b=100+%%a
  set b=%b:~-2%
  echo a=[%%a] b=[%b%]
)

По идее у меня должно напечататься 20 строк вида:

a=[x] b=[zy]

где x - значение переменной счетчика цикла, y=x, а z - ведущий ноль, если он есть.

Однако, вместо этого печатаются строчки вида:

a=[x] b=[]

Я перепробовал все варианты, какие только смог придумать. Увы, все команды работают с %%a нормально, кроме команды присвоения. Вариант с setlocal EnableDelayedExpansion тоже не помог. Пришлось выкручиваться. Частично решение, саму идею, нашел здесь.


for /L %%a in (1,1,20) do (
  call :MySub %%a
  echo a=[%%a] b=[%b%]

)

exit /b 0

:MySub
  set /A b=100+%~1
  set b=%b:~-2%

exit /b 0


После этого всё заработало.

Вывод: если надо что-то сделать со значением счетчика цикла, сложнее чем вывести его значение на экран, то для этого лучше передать его как параметр в подпрограмму.

вторник, 4 апреля 2017 г.

Auf viderseen, Гримм

И снова подошел к концу очередной сериал, от которого было невозможно оторваться. Пять с половиной лет я следил за приключениями Ника Бёркхарта и его спутников. Пока что это единственный после "Звездных врат" сериал, где мне не хотелось за серии ставить​ оценки ниже чем 9 из 10. И я сомневаюсь, что в ближайшее время найдется что-то подобное по качеству. "Нация Z" хороша, но это совсем другой жанр, комедия с претензией на глубину. А "Гримма" я даже и не знаю, как охарактеризовать. Странная, но чертовски захватывающая смесь сказки, фентези и не самого плохого детектива.
Те, кто ждал, что Ник в конце всех оживит, оказались правы, но такого варианта концовки не предвидел никто из комментаторов.
Если рассуждать в терминах той вселенной, то теперь создан практически нерушимый союз гримма, ведьмы, существ и колдуна. Недаром же Диана упомянула, что тройняшки тоже идут с ними убивать каких-то тварей, да еще и в компании папы с мамой. Одно непонятно, какого из двух пап имела в виду Диана - биологического или официального? Впрочем, если на "дело" пойдут оба, то, как в той песне, любому чудищу смерть.
Жаль, что сериал закончен, но концовкой авторы, отрубившие множество сюжетных линий, постарались не оставить чувство незавершенного, как это было с "LOST". В самом деле, зачем пытаться размотать все истории - монет или королевской семьи - за несколько лет жизни только одного персонажа. Келли явно будет чем заняться, когда Ник выйдет на покой...
Надеюсь, что когда-нибудь снимут продолжение...

пятница, 10 марта 2017 г.

WinWord и вставка названия главы в колонтитул

Вот уж не думал, что буду что-то писать про работу в MS Office, но пришлось.
Сочиняю сейчас памятку для пользователей и понадобилось для удобочитаемости в верхней части каждой страницы вставить название главы, которая есть на этой странице.
Погуглил...

Вот как это делается в Star/Open/Libre-office:

1. присвоить нужным заголовкам соответствующие стили
2. открыть колонтитул
3. Выберите команду Вставка – Поля – Дополнительно и перейдите на вкладку Документ.
NB! в вики по ссылке в русской версии ошибка - надо открывать вкладку "Документ", как на моем скриншоте, а не "Функции", как написано там. В английской версии той же вики всё правильно.
4. В списке Тип выберите пункт "Глава", а в списке Формат – пункт "Название и номер главы".
5. Нажмите кнопку Вставить, затем кнопку Закрыть.

Скриншот из Apache OpenOffice 4.1.3 под XUbuntu 16.04.2

А вот через какую жопу это делается в излишне популярном продукте.

Большинство советчиков предлагают вручную вставлять для каждой главы перекрестную ссылку на ее заголовок в каждый колонтитул. Что будет с этими ссылками, если страницы поедут или между двумя заголовками появится третий, советчиков не волнует.

На самом же деле всё намного проще, и вместе с тем сложнее.

1. Вставка - Поле
2. Категория: Связи и ссылки
3. Поле: StyleRef

Скриншот из MSO 2003 под W2K3/server, тема "классическая"

И в итоге, как только на очередной странице появляется новый абзац в указанном стиле, так автоматически меняется содержимое вставленного поля. Хоть в колонтитуле, хоть у чёрта в стуле. Но у опенсорсников сделано куда понятнее и логичнее - "вставить номер и (или) название главы".

пятница, 17 февраля 2017 г.

Ubuntu: ADTool и WMIC

Когда-то обе эти утилиты были в репозиториях убунты, но по какой-то причине их оттуда убрали. А зря.

ADTool

ADTool не имеет никакого отношения к рекламе (advertising), зато имеет конкретное отношение к активному каталогу (Active Directory).
По сути, это оболочка над клиентом OpenLDAP, позволяющая максимально комфортно обращаться к ADDS из-под линукса. Распространяется в исходниках, работает нормально.

https://gp2x.org/adtool/

В комплекте идет довольно короткий но понятный ман: https://gp2x.org/adtool/usage.html. Из-за ограниченных прав в домене, я больше всего использую команды search (поиск объектов по значению атрибута) и list (просмотр содержимого контейнера), которых как раз недостает в самбовской net.

Базовые параметры - имя пользователя, пароль, узел, от которого начинается поиск, имя сервера AD - можно задавать каждый раз в командной строке или один раз в файле конфигурации.

среда, 8 февраля 2017 г.

bash, AD: выбор пользователей из группы, входящих и в другую группу

Есть в нашем домене группа, куда добавлены работники разных филиалов, но мне надо обработать только тех, что находятся в моем филиале. Причем не всех, а только из отдельных подразделений.
В свое время я предлагал сделать возможность создания вложенных OU, чтобы группировать пользователей по отделам внутри филиала. В ответ узнал очень много о своей умственной неполноценности.
Не буду сейчас характеризовать тех, кто этого добивался - свалить всех в одну кучу, потому что свои проблемы я решил. Не так эффективно, как можно было, но для моих целей достаточно. А как они там фигачат километровые скрипты на PowerShell, чтобы найти жемчужинку в тоннах информационного навоза, меня не касается.
Однако, изменить структуру домена я не могу, поэтому приспосабливаемся.

Итак, задача:
1. есть группа, в которую свалены работники разных филиалов. Все логины имеют вид фамилия_инициалыN, где N - цифра, добавляемая в случае совпадения фамилии и инициалов (вонючий костыль вместо того, чтобы разрешить создавать субдомены)
2. мне надо отобрать своих
3. что-то с этими своими сделать.