статистика базыпаспорт архиварезервные копииимпорт и экспорт в АФ3обновление программыдополнительные таблицыподсчёт сводных
статистика по таблицам по представлениям БД «Архивный Фонд»
таблица описание записей обновление размер
отчёты_об_ошибках 0 2017-07-02 13:17:17 1024
список_всех_описей 0 2017-07-02 13:17:17 1024
DELO Список дел 46863 2017-07-02 13:16:46 17.3 мб.
DELO2 Физическое состояние 0 2017-07-02 13:16:46 1024
DELO3 Рассекречивание 0 2017-07-02 13:16:46 1024
DELO4 Характеристика НТД 0 2017-07-02 13:16:46 1024
DELO5 Характеристика фотодокум. 0 2017-07-02 13:16:46 1024
DOCUM Документ 0 2017-07-02 13:16:46 1024
FOND Список фондов 4269 2017-07-02 13:17:01 26.4 мб.
FOND2 Библиография 0 2017-07-02 13:17:01 1024
FOND3 Переименования 269 2017-07-02 13:17:01 93.8 кб.
FOND4 Биографическая справка 0 2017-07-02 13:17:01 1024
FOND5 Фондовые включения 1 2017-07-02 13:17:01 1.0 кб.
FOND6 Незадокументирован. периоды 1 2017-07-02 13:17:01 1.0 кб.
FOND7 Состав ОАФ 0 2017-07-02 13:17:01 1024
GEOGRAF1 География к фонду 10 2017-07-02 13:17:01 1.3 кб.
GEOGRAF2 География к делу 0 2017-07-02 13:17:01 1024
GEOGRAF3 География к вопросу 0 2017-07-02 13:17:01 1024
KOMISSIA Названия комиссий (рассекр.) 0 2017-07-02 13:17:01 1024
MOVE Движение 185 2017-07-02 13:17:01 20.3 кб.
OPIS Список дел 11302 2017-07-02 13:17:08 11.6 мб.
OPIS2 Топография 5613 2017-07-02 13:17:08 481.7 кб.
PASPORT Паспорт 1 2017-07-02 13:17:08 2.8 кб.
PERSONA1 Персоналии к фонду 6 2017-07-02 13:17:08 1.4 кб.
PERSONA2 Персоналии к делу 561 2017-07-02 13:17:08 71.1 кб.
PERSONA3 Персоналии к вопросу 0 2017-07-02 13:17:08 1024
RUBRIKA1 Рубрикатор (Путеводитель) 1 2017-07-02 13:17:08 1.1 кб.
RUBRIKA2 Рубрикатор (структура описи) 6 2017-07-02 13:17:08 1.5 кб.
RUBRIKA3 Рубрикатор (СЕК) 1 2017-07-02 13:17:08 1.1 кб.
SYS Служебная информация 454 2017-07-02 13:17:16 30.9 кб.
TEMATIK1 Тематика к фонду 7 2017-07-02 13:17:17 1.3 кб.
TEMATIK2 Тематика к делу 0 2017-07-02 13:17:17 1024
TEMATIK3 Тематика к вопросу 0 2017-07-02 13:17:17 1024
TMPXBASE 0 2017-07-02 13:17:17 1024
VDOCUM Вопросы к документам 0 2017-07-02 13:17:17 1024
VOPROS Вопрос 0 2017-07-02 13:17:17 1024
WORD2 Ключевые слова к делу 0 2017-07-02 13:17:17 1024
WORD3 Ключевые слова к вопросу 0 2017-07-02 13:17:17 1024
af3_arhiv Архив 1 2017-07-02 13:16:03 1.6 кб.
af3_delo Список дел 63762 2017-07-02 13:16:14 22.5 мб.
af3_fond Список фондов 4272 2017-07-02 13:16:31 26.9 мб.
af3_fond3 Переименования 297 2017-07-02 13:16:31 103.8 кб.
af3_opis Список дел 11310 2017-07-02 13:16:36 11.7 мб.
af3_opis2 Топография 5613 2017-07-02 13:16:37 481.7 кб.
af3_persona2 Персоналии к делу 559 2017-07-02 13:16:37 71.0 кб.
akt список актов проверки 1266 2017-07-02 13:16:37 258.0 кб.
delo_digital_image 0 2017-07-02 13:16:46 1024
delo_opis 0 2017-07-02 13:16:46 1024
delo_sys 0 2017-07-02 13:16:46 1024
digital_image список цифровых образов документов 10997 2021-07-02 15:48:43 4.6 мб.
digital_image_light 0 2017-07-02 13:16:46 1024
doc_view список видов документов 181 2017-07-02 13:16:46 8.9 кб.
doctype виды документов 6 2017-07-02 13:16:46 2.2 кб.
employee Список сотрудников архива 16 2017-07-02 13:16:46 2.9 кб.
example 335 2017-07-02 13:16:46 77.2 кб.
fond_add 0 2017-07-02 13:17:01 1024
fond_lich_sostav список фондов содержащих документы по личному составу 413 2017-07-02 13:17:01 424.0 кб.
fotos_authors 0 2017-07-02 13:17:01 1024
fotos_places 0 2017-07-02 13:17:01 1024
fotos_sections 0 2017-07-02 13:17:01 1024
kartocka_and_nagrada 0 2017-07-02 13:17:01 1024
kartocka_and_nagrada_4 0 2017-07-02 13:17:01 1024
kartocka_and_nagrada_5 0 2017-07-02 13:17:01 1024
lich_sostav 413 2017-07-02 13:17:01 551.1 кб.
list_digital_image_delo 0 2017-07-02 13:17:01 1024
list_nagrada список наград содержащихся в фондах, описях, делах 1815 2017-07-02 13:17:01 1.0 мб.
list_nagrada_stat 0 2017-07-02 13:17:01 1024
message 16 2024-06-27 07:19:10 85.9 кб.
meta 16 2017-07-02 13:17:01 3.5 кб.
nagrada_rubrikator 0 2017-07-02 13:17:01 1024
nagrada_view_list список наград 69 2017-07-02 13:17:01 14.7 кб.
opis_sys 0 2017-07-02 13:17:08 1024
place список хранилищ 6 2017-07-02 13:17:08 9.2 кб.
places 0 2017-07-02 13:17:08 1024
request главная таблица картотеки запросов 1460 2017-07-02 13:17:08 167.1 кб.
rubrikator 4593 2017-07-02 13:17:08 854.9 кб.
rubrikator_links Связь с рубрикатором 20993 2017-07-02 13:17:08 1009.6 кб.
rubrikator_links_sys 0 2017-07-02 13:17:08 1024
section_fotos 0 2017-07-02 13:17:08 1024
section_fotos_links 0 2017-07-02 13:17:08 1024
section_fotos_links_sys 0 2017-07-02 13:17:08 1024
sections 0 2017-07-02 13:17:08 1024
session 11587666 2024-06-27 12:09:30 88.4 мб.
subsection Таблица подразделов сайтов 53 2017-07-02 13:17:16 4.7 кб.
subsection_pages Связь между таблицы разделов и страниц 0 2017-07-02 13:17:16 1024
sys_A100 0 2017-07-02 13:17:16 1024
sys_A102 0 2017-07-02 13:17:16 1024
sys_A103 0 2017-07-02 13:17:16 1024
sys_A104 0 2017-07-02 13:17:16 1024
sys_A105 0 2017-07-02 13:17:16 1024
sys_A107 0 2017-07-02 13:17:16 1024
sys_A117 0 2017-07-02 13:17:16 1024
sys_A118 0 2017-07-02 13:17:16 1024
sys_A119 0 2017-07-02 13:17:17 1024
sys_A12 0 2017-07-02 13:17:16 1024
sys_A120 0 2017-07-02 13:17:17 1024
sys_A121 0 2017-07-02 13:17:17 1024
sys_A123 0 2017-07-02 13:17:17 1024
sys_A128 0 2017-07-02 13:17:17 1024
sys_A13 0 2017-07-02 13:17:16 1024
sys_A4 0 2017-07-02 13:17:16 1024
sys_A94 0 2017-07-02 13:17:16 1024
sys_A98 0 2017-07-02 13:17:16 1024
sys_A99 0 2017-07-02 13:17:16 1024
sys_B7 0 2017-07-02 13:17:17 1024
sys_F3 0 2017-07-02 13:17:17 1024
sys_G1 0 2017-07-02 13:17:17 1024
sys_G15 0 2017-07-02 13:17:17 1024
sys_G17 0 2017-07-02 13:17:17 1024
sys_G18 0 2017-07-02 13:17:17 1024
sys_G19 0 2017-07-02 13:17:17 1024
sys_G20 0 2017-07-02 13:17:17 1024
sys_G21 0 2017-07-02 13:17:17 1024
sys_G22 0 2017-07-02 13:17:17 1024
sys_G24 0 2017-07-02 13:17:17 1024
sys_G27 0 2017-07-02 13:17:17 1024
sys_G28 0 2017-07-02 13:17:17 1024
sys_G29 0 2017-07-02 13:17:17 1024
sys_G30 0 2017-07-02 13:17:17 1024
sys_G31 0 2017-07-02 13:17:17 1024
sys_G32 0 2017-07-02 13:17:17 1024
sys_I2 0 2017-07-02 13:17:17 1024
sys_I8 0 2017-07-02 13:17:17 1024
sys_L12 0 2017-07-02 13:17:17 1024
sys_L13 0 2017-07-02 13:17:17 1024
sys_L17 0 2017-07-02 13:17:17 1024
sys_L18 0 2017-07-02 13:17:17 1024
sys_L3 0 2017-07-02 13:17:17 1024
sys_L4 0 2017-07-02 13:17:17 1024
sys_M1 0 2017-07-02 13:17:17 1024
sys_M2 0 2017-07-02 13:17:17 1024
sys_M4 0 2017-07-02 13:17:17 1024
sys_N3 0 2017-07-02 13:17:17 1024
sys_O4 0 2017-07-02 13:17:17 1024
sys_O5 0 2017-07-02 13:17:17 1024
sys_O6 0 2017-07-02 13:17:17 1024
sys_T14 0 2017-07-02 13:17:17 1024
sys_T15 0 2017-07-02 13:17:17 1024
sys_T7 0 2017-07-02 13:17:17 1024
sys_list_nagrada 0 2017-07-02 13:17:17 1024
sys_list_nagrada_2 0 2017-07-02 13:17:17 1024
topography 4282 2017-07-02 13:17:17 733.8 кб.
uchrejdenie 34 2017-07-02 13:17:17 9.9 кб.
vid_uchr 34 2017-07-02 13:17:17 9.9 кб.
Общее количество строк: 11790028 Объём данны БД: 216.1 мб.

Исходный код модуля /home/httpd/af-web.gaspiko.ru/cgi-bin/plugins2/service.pyc

# -*- coding: utf8 -*-
import datetime
import config
SQL = """SHOW TABLE STATUS FROM %s WHERE Engine is not NULL;"""%config.bdname
FOUND_ROWS = False
ROOT = "show_service"
ROOT_PREFIX = "%s"%datetime.date.today().strftime("%Y-%m-%d")
ROOT_POSTFIX= None
XSL_TEMPLATE = "data/af-web.xsl"
EVENT = None
WHERE = ()
PARAM = None
TITLE="Сервисная страница, информация по таблица БД"
MESSAGE="невозможно получить статистику базы"
ORDER = None

Исходный код модуля /home/httpd/af-web.gaspiko.ru/cgi-bin/app2.py

#!/usr/bin/env python
#
#       app2.py
#
#       Copyright 2010 Basmanov Illya 
#
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.
import sys
import config

#sys.stderr = sys.stdout
#print "Content-Type: text/html; charset=utf8\n\n"

import ffcgi
import libs
from user import user
from base import bd_sql
from xslt_proc import xml_xsl_proc

plugin_dir = "plugins2"


def load_module():
    if ffcgi.cgi_check_name("plugins"):
        module_name = ffcgi.cgi_value( "plugins" )
        return libs.load_module_name(module_name, plugin_dir)
    else:
        return None


def load_env():
    data, page, limit = {}, 0, int(config.limit)
    if ffcgi.cgi_check_name("p"):
        page = int(ffcgi.cgi_value("p"))
    if ffcgi.cgi_check_name("l"):
        limit = int(ffcgi.cgi_value("l"))
    if ffcgi.cgi_check_name("plugins"):
        data["plugins"] = ffcgi.cgi_value( "plugins" )
    if ffcgi.cgi_value("ORDER_DIRECTION") in ("DESC", "ASC"):
        data["direction"] = ffcgi.cgi_value("ORDER_DIRECTION")
    else:
        data["direction"] = "DESC"
    data["page"] = page
    data["limit"] = limit
    data["offset"] = page * limit
    xml = user[3] +"%(page)d%(limit)d%(offset)d%(plugins)s%(direction)s"%data
    return data, xml

def make_order(cgi_param):
    if cgi_param is not None:
        order = []
        direction = "DESC"
        if ffcgi.cgi_value("ORDER_DIRECTION") in ("DESC", "ASC"):
            direction = ffcgi.cgi_value("ORDER_DIRECTION")
        for param in cgi_param:
            if ffcgi.cgi_value("ORDER") == param:
                value = param
                if type(value) == list:
                    order.append( ", ".join(["`%s`"%v for v in value]) )
                elif type(value) == str:
                    order.append( "`%s`"%value )
                return " ORDER BY %s %s"%(",".join(order), direction)
    return ""


def make_where(cgi_param, IF_ID_DOMEN=None):
    if cgi_param is None:
        return ""
    where = []
    where_like = []
    if IF_ID_DOMEN is not None:
        where.append(IF_ID_DOMEN)
    if ffcgi.cgi_check_name("WHERE_LIKE"):
        where_like = ffcgi.cgi_value("WHERE_LIKE")
    for param in cgi_param:
        if ffcgi.cgi_check_name(param):
            value = ffcgi.cgi_value(param)
            if type(value) == list:
                param = param.replace('.','`.`')
                if ffcgi.cgi_check_name("BETWEEN") and len(value)==2:
                    where.append( "`%s` BETWEEN %s AND %s"%(param, value[0], value[1] ))
                else:
                    where.append( "`%s` IN (%s)"%(param, ", ".join(["'%s'"%v for v in value])) )
            elif type(value) == str or type(value) == int :
                if param in where_like:
                    param = param.replace('.','`.`')
                    where.append( "`%s` LIKE '%%%s%%'"%(param, str(value)) )
                else:
                    param = param.replace('.','`.`')
                    where.append( "`%s`='%s'"%(param, str(value)) )
            else:
                pass
    if len(where):
        where = " AND ".join(where)
        return "WHERE "+where
    return ""

def list_to_xml(listtx):
    txml = ""
    if listtx:
            for lx in listtx:
                txml += "%s"%lx
    return txml

def exec_sql(module, data, sql, root):
    xml = ""
    try:
        sql = sql%data
        if ffcgi.cgi_check_name("SQL"):
            print sql, ""
        if bd_sql.execute( sql, module.TITLE ):
            txml = bd_sql.get_xml( event = module.EVENT)
            if module.FOUND_ROWS:
                if bd_sql.execute( "select found_rows() as count;" ):
                    txml += bd_sql.get_xml("all_count")
            xml = "<%s>%s"%(root, txml, root)
        else:
            if module.ROOT_POSTFIX:
                xml += module.ROOT_POSTFIX
            xml += libs.make_message( "%s"%libs.make_cdata(module.MESSAGE) + "%s"%libs.make_cdata(sql) )
    except Exception, e:
        xml += libs.make_message( "%s: %s"%libs.make_cdata(module.MESSAGE, e) )
    return xml

def exec_sql_json(module, data, sql, root):
    json_data = {root: {}, }
    try:
        sql = sql%data
        if ffcgi.cgi_check_name("SQL"):
            print sql, ""
        if bd_sql.execute( sql, module.TITLE ):
            json_data[root]["row"] = bd_sql.get_row()
            if module.FOUND_ROWS:
                if bd_sql.execute( "select found_rows() as count;" ):
                    json_data[root]["all_count"] = bd_sql.get_row()[0][0]
        else:
            json_data[root]['error-message'] = module.MESSAGE
            json_data[root]['error-sql'] = sql
    except Exception, e:
        json_data[root]['error-message'] = module.MESSAGE
        json_data[root]['error-sql'] = sql
    return json_data

def main():

    module = load_module()
    if module:
        data, xml = load_env()
        xml += ffcgi.cgi_xml() + "%s"%list_to_xml(module.WHERE)
        if_id_domen = None
        if "IF_ID_DOMEN" in dir(module):
            if_id_domen = module.IF_ID_DOMEN
        data["where"] = make_where(module.WHERE, if_id_domen)
        data["order"] = make_order(module.ORDER)
        xml += "%s"%module.TITLE


        if module.PARAM:
            txml = ""
            for param in module.PARAM:
                if ffcgi.cgi_check_name(param):
                    value = ffcgi.cgi_value(param)
                    if type(value) == list:
                        for v in value:
                            data[param] = v
                            txml += "<%s>%s"%(param, libs.make_str_cdata( v ), param)
                    elif type(value) == str:
                        data[param] = value
                        txml += "<%s>%s"%(param, libs.make_str_cdata(value), param)
            xml += "%s"%txml

        if module.ROOT_PREFIX:
            xml += module.ROOT_PREFIX

        if ffcgi.cgi_check_name("cmd") and ffcgi.cgi_value("cmd")=="add":
            xml += "<%s />"%module.ROOT
        elif ffcgi.cgi_check_name("format"):
            # output format JSON
            try:
                from json import dumps
            except:
                from simplejson import dumps
            json_data = {module.ROOT:  [exec_sql_json(module, data, sql = module.SQL[i][1], root = module.SQL[i][0]) for i in range(0, len(module.SQL))][0]}
            print dumps( json_data )
            return
        else:
            if type(module.SQL)==str:
                xml += exec_sql(module, data, module.SQL, module.ROOT)
            else:
                xml += "<%s>%s"%(module.ROOT, "\n\t\t".join([exec_sql(module, data, sql = module.SQL[i][1], root = module.SQL[i][0]) for i in range(0, len(module.SQL))]), module.ROOT)



        if ffcgi.cgi_check_name("dbg"):
            xml += bd_sql.history()

        if ffcgi.cgi_check_name("src"):
            def make_source(filename):
                return filename, libs.make_str_cdata(open(".".join(filename.split('.')[:-1])+".py").read().replace(" "," "))
            xml += "%s%s"%make_source(module.__file__)
            xml += "%s%s"%make_source(__file__)


        xml = "%s"%xml.replace('\0','')
        libs.save_xml(xml, module.__file__ )

        try:
            print xml_xsl_proc(xml,fxsl=module.XSL_TEMPLATE)
        except Exception, e:
            print e

    else:
        print "no define module"
    return 0

if __name__ == '__main__':
    try:
        main()
    except Exception, e:
            print e

Отладочная информация

список sql запросов страницы

  1. INSERT INTO session (UID,HASH,REFERER,UAGENT,date,id_domen) VALUES(0,'guest253198918384649951','','webkit/None',now(),@id_domen)#созадём новую сессию для ананимоуса
  2. SHOW TABLE STATUS FROM ensa_gaspiko WHERE Engine is not NULL;#Сервисная страница, информация по таблица БД

список CGI параметров

параметр значение
src show
dbg show
plugins service