← All posts tagged opensource

Давным-давно, кажется, в 2006, проводил Microsoft какую-то конференцию/презентацию в родном БЛГ.
Была тема туда попасть, по знакоству, с одним "официальным партнером", там, как раз, должны были Висту презентовать (ага, ту, которую мы уже скачали, погоняли и обосрали).
Короч, выпросили себе оплаченный выходной (я, как инициатор и нач. отдела как нач. отдела и мой охуенный корефан) и поперлись поржать и (это главное) на халяву побухать на фуршете.
Было весело, я мышку выиграл, вроде, Гай — ежедневником удовлетворился.
нажрались, поиздевались над чуваком с пре-релизом висты на ноуте.

Но, к чему я это все...
Нам раздали материалы конференции.
На CD.
В формате ODP
Это все что нужно знать о Microsoft

Я зопилил возможность из PostgreSQL напрямую обращаться к MSSQL.
Нужен pl/python и установленный в системе pymssql. И еще нужно создать тип

а дальше — тривиально

— Function: test3()

— DROP FUNCTION test3();

CREATE OR REPLACE FUNCTION test3()
RETURNS SETOF st_vetitems AS
$BODY$import pymssql
try:
connms = pymssql.connect(host='server', user='user', password='password', database='db', charset='utf8')
except pymssql.DatabaseError:
print;
curms = connms.cursor()
curms.execute(""" SELECT * FROM [mira71].[dbo].[v_items] ORDER BY "No" """);
rowms = curms.fetchone()
arr = []
while rowms:
myrow = []
for col in rowms:
if isinstance(col, basestring ):
col = col.encode('utf-8')
myrow.append(col)
arr.append(myrow)
rowms = curms.fetchone()
return arr$BODY$
LANGUAGE plpythonu VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION test3() OWNER TO pigfarm;

Мои московские вендоколлеги, не в состоянии осилить интерфейс grep'а, и постоянно долбают просьбами посмотреть, а не завернуто ли то или иное письмо нашим антиспамом на Postfix'e
Мне это надоело, и сегодня родился этот проект.))
Если кому надо, то вот вам web-морда для grep'а по логам postfix'а которые коллекционируются metalog'ом
Доработку для остальных случаев оставлю сторонним разработчикам

cat ./grep.cgi
#!/bin/bash
#(c) Graf,2010
# GPL 3

# disable filename globbing
set -f

echo "Content-type: text/html; charset=utf8"
echo


if [ "$REQUEST_METHOD" = "POST" ]; then
read POST_STRING
fi;

echo "<html>"
echo "<head>"
echo "<title> GREP </title>"
echo "</head>"
echo "<body>"
echo '<div align="center">'
echo '<form name="mf" method="post" action="grep.cgi">'
echo 'Введите паттерн: '
echo '<input type="text" name="query" > <br>'
echo '<input type="radio" name="logf" value="current">текущий лог</input> <br /> <input type="radio" name="logf" value="*">все доступные</input> <br/>'
echo '<input type="submit" value="поиск" />'
echo '</form>'
echo '</div>'
#echo CGI/1.0 test script report:
#echo

# replace all escaped percent signs with a single percent sign
POST_STRING=$(echo $POST_STRING | sed 's/%%/%/g')
# replace all ampersands with spaces for easier handling later
POST_STRING=$(echo $POST_STRING | sed 's/&/ /g')
echo $POST_STRING
for i in $POST_STRING; do
#echo $i;
eval "$i";
done;
echo '<br />'
#echo $query
echo '<br />'
#echo $logf
echo '<br />'
rep="<font color=red>$query</font>"
#result=$(grep -i $query /var/log/mail/$logf | sed 's/</\&lt;/g; s/>/\&gt/g;';)
result=$(grep -i $query /var/log/mail/$logf |sed '{:q;N;s/\n/<br>/g;}')
#result=${result/\n/<br>}
result=${result//</\&lt;}
result=${result//>/\&gt;}
result=${result//&lt;br&gt;/<br />}
result=${result//$query/$rep}
echo $result
echo "</body>"
echo "</html>"