Monday, March 26, 2012

cfengine3: howto make a symlink

    files:
        guest.need_update::
        "/etc/localtime"
        handle => "timezone_link",
        comment => "Timezone link",
        link_from => ln_s("/usr/share/zoneinfo/Asia/Novosibirsk");

Friday, March 23, 2012

Fresh presentation about PostgreSQL performance tuning (2012)


PostgreSQL
Performance Tuning
BRUCE MOMJIAN (Senior Database Architect in EnterpriseDB)

Source: http://momjian.us/main/presentations/overview.html

There is lot's of other interesting stuff also.

Copy on Google: https://docs.google.com/open?id=0B1Mh3B-dAA04NXcyOVZJSEtUZ0M0c0FFMkF0T0hKQQ

Saturday, March 17, 2012

Три поросёнка. (китайский вариант)



Жили-были три маленьких свиньи. Целыми днями они только и делали что играли.




Узнали они о так называемой Серой Угрозе. Линь-линь построил домик из соломы...





Лян-Лян - из листьев и какашек...





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





Сокращение сроков производства с потерей качества позволила Линь-Линю и Лян-Ляну продолжить веселье.





Люнь-Люнь же старательно строил крепость из кирпичей...





И вот однажды, когда Люнь-Люнь докладывал шестой уровень...





Он почувствовал, что за его работой кто-то пристально наблюдает...







...Тут и сказочке конец.


(from trinixy.ru)



Voting Machines











Monday, March 12, 2012

a script to remove old partitions from a zabbix database

This script searches the database (postgres) for the most old tables and removes if they are old enough. Only for %Y_%m_%d format.
#!/usr/bin/python



import sys;
#import datetime;
from datetime import datetime, date, time, timedelta, tzinfo;
import time;
import psycopg2;

###### User params ########

TABLES = ( "history", "history_log", "history_uint", "history_str" );
MONTH = 3;
LIMIT = 3;

db_params = "host='localhost' dbname='zabbix' user='zabbix' password='xxx'";

##### End of User params ##




th_mth_ago = (datetime.today() - timedelta(MONTH*365/12)).strftime("%Y_%m_%d");
log_ft = "%Y-%m-%d %H:%M:%S";


def pg(curs,table,q):
    cnds = [];

    curs.execute(q);
    for row in curs:
        cnds.append(row[0]);

    return cnds;


def main():


    conn = psycopg2.connect(db_params);
    curs = conn.cursor();

    print "%s" %(datetime.now().strftime(log_ft));

    for table in TABLES:
 table_long = "partitions." + table + "_" + th_mth_ago;
        query = "SELECT  tablename FROM pg_tables WHERE schemaname='partitions' AND tablename like '" + table + "%' order by tablename limit " + str(LIMIT);
 candidates = pg(curs,table,query);
 if candidates:
  print "\n %s oldest tables:" % (LIMIT);
 for c_table in candidates:
     sys.stdout.write( '\n\t' + c_table + '');
     ct = str.rsplit(c_table,table+"_");
            candidate_time = ct[1];
     dt = datetime.strptime(candidate_time,"%Y_%m_%d");
#         print dt.strftime("%Y_%m_%d");
            if (dt.strftime("%Y_%m_%d") < th_mth_ago):


  sys.stdout.write(' is older then tree months.\n');

  try:
      q1 = "ALTER TABLE partitions." + table + "_" + dt.strftime("%Y_%m_%d") + " NO INHERIT " + table;
      print "%s: %s;" %(datetime.now().strftime(log_ft),q1);
             curs.execute(q1);
  except:
      print "%s: No inheritance!"%(datetime.now().strftime(log_ft));
      conn.rollback();
      pass;

  sys.exc_clear();

  try:
          q2 = "DROP RULE route_" + dt.strftime("%Y_%m_%d") + " ON " + table;
      print "%s: %s;" %(datetime.now().strftime(log_ft),q2);
          curs.execute(q2);
  except:
      print "%s: No INSERT rule!" %(datetime.now().strftime(log_ft));
      conn.rollback();
      pass;

  sys.exc_clear();

  conn.commit();
  
  q3 = "DROP TABLE partitions." + table + "_" + dt.strftime("%Y_%m_%d") + " CASCADE";
  print "%s: %s;" %(datetime.now().strftime(log_ft),q3);
         curs.execute(q3);
  conn.commit();
  
                print "%s: OK" %(datetime.now().strftime(log_ft));

    print "\n%s: Finished" % (datetime.now().strftime(log_ft));
    curs.close()
    conn.close()
    sys.stdout.flush()
    sys.stderr.flush()


if __name__ == "__main__":
    sys.exit(main())

# author: crypt
# url: http://crypt47.blogspot.com
# EOF

Wednesday, March 7, 2012