• 24Jun

    Пока мой ноут еще жив, а читатели делают ставки, я решил перед сном еще расковырять django-debug-tolbar.

    По сути все панели построены на хаках. Т.е. В архитектуре самого движка не закладывалась такая фишка. Т.е. К примеру берут класс BaseCache для из модуля django.core.cache.backends.base делают на его основе наследника, который делает тоже самое, только еще и считает. И заменяют полученный класс в модуле. Т.е. теперь там лежит «тулбарный» класс, и джанго для своей кухни будет брать его, а он уже будет делать свои «темные делишки».

    Я для своего csvlog выкавырял оттуда только sql. Теперь я могу еще и вести лог всех запросов, проходящих в вашем апе, и говорить, сколько времени они съели. Сделал сразу компонентную структуру, почти как у этого самого тулбара, так что если что можете отключать.

    А хак этот выглядит совсем не сложно:

    1. from django.db.backends import util
    2. import time
    3. from csvlog.middleware import glog
    4. class DatabaseStatTracker(util.CursorDebugWrapper):
    5.     def execute(self, sql, params=()):
    6.         start = time.time()
    7.         try:
    8.             return self.cursor.execute(sql, params)
    9.         finally:
    10.             stop = time.time()
    11.             glog.dbg(['__SQL__',stop-start,sql,unicode(params)])
    12. util.CursorDebugWrapper = DatabaseStatTracker

    Да, и я не тестил, но очень сильно подозреваю, что теперь кто-то из них двоих не сможет считать сюелины, и скорее всего тот, чей ап идет позже в INSTALLED_APPS.

    PS: Забыл предварительно проверить свободное место на винте. Бедняга должен умереть свободным.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 22Jun

    Исправил много мелких багов, но надо уже написать нормальную доку. Есть еще идея, взять кусочки из джанго тулбара и к примеру дать возможность выводить все СЮЛ запросы.

    Кроме того, сейчас пишу еще одно приложения – простое для принятия платежей. Хотя, получилась довольно универсальная фишка. Так вот в нем я использую эти логи, но есть вероятность, хотя и маленькая, но есть, что комуто логи эти будут не подуше, поетому я еще и заглушку сделал. Такие заглушки можно писать для взаимодейстивя между джанго приложений.

    В папку с аппом добовляем файлик extapp.py

    1. __all__ = ['glog']
    2. from django.conf import settings
    3. if 'csvlog' in  settings.INSTALLED_APPS:
    4.     from csvlog import glog
    5. else:
    6.     class glog():
    7.         @staticmethod
    8.         def get_log_func(self,*args):
    9.             return lambda *args:None
    10.     for n in ['err','imp','inf','log','trc','dbg']:
    11.         setattr(glog,n,staticmethod(lambda *args:None))

    проверяет есть ли апп, если нет, то пишем для него заглушку. А везде в коде просто юзаем

    1. from extapp import glog

    I love Python!

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , ,

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...