0%
Обязательно ознакомьтесь с правилами форума!
Требуются люди в Команду форума для наполнения сайта ресурсами и полезным контентом. Писать в Telegram: @g_r_e_a_t_z_a_r_a_z_a
Чат для серверодержателей CS 1.6

Чат для серверодержателей Counter-Strike 1.6 а так же владельцев сайтов на движке GameCMS

Сообщество администраторов, разработчиков и владельцев серверов

GameCMS обсуждение Разработка плагинов Администрирование Опытные специалисты Безопасность и оптимизация
Рекламное место

Рекламное место свободно

Разместите свою рекламу прямо здесь!

Активная аудитория Высокая конверсия Доступная цена Эффективная реклама
Clear Logs

CS 1.6 Amxx Clear Logs 17.01.2020

Автоматическая очистка логов сервера.
Код:
#include < amxmodx >

#define LOG_PATH                "addons/amxmodx/logs/"            //Укажите путь до папки в которую будет писать LOG_FILE
#define LOG_FILE                "cc_logs.log"                    //Файл, логирования очистки [перезаписывается автоматически каждую очистку папок]

#define DAYS                     14                                //раз в сколько дней производить очистку
#define KEY                        "cc_logs"                        //ключ куда записывается, когда очищать логи
#define MAX_MASK                5                                //В принципе должно хватить деф значения, но если прилетит warning в лог, то увеличьте ;)
//#define ONLY_ALL                                                //Если не будете использовать маски файлов, то раскоментируйте. (будет удалять ВСЕ файлы в указанной Вами папке, в подпапки также заходить НЕ будет) [уберёт лишние прверки]


//============= dont touch
#define NOT_MAGIC_MASK            32
#define NOT_MAGIC                MAX_MASK * NOT_MAGIC_MASK
#define NOT_MAGIC_FILE            128
//                dont touch =============

enum EFILES {
    PATH[NOT_MAGIC_FILE],
    FILES[NOT_MAGIC]
}

//Плагин будет чистить только папки указанные Вами ЗДЕСЬ. Вложенные папки не трогает.
new sFiles[][EFILES] = {                                    
    {"logs", "*"},                                                //Будет чистить cstrike/logs, удалять все файлы
    {"addons/amxmodx/logs/chatmanager", "?*.html"},                //Будет чистить addons/amxmodx/logs/chatmanager, удалять будет все файлы с расширением .html
    {"addons/amxmodx/logs", "error_*.log;L*.log"}                //Будет чистить addons/amxmodx/logs, удалять будет только error_*.log файлы, т.е все error логи и все обычные логи начинающиеся на букву L.
}

public plugin_cfg(){
    register_plugin("Clear Logs", "17.01.2020", "PAffAEJIkA :3");

    new day, dt[4];
    get_time("%j", dt, charsmax(dt));
    day = str_to_num(dt);

    if(!vaultdata_exists(KEY))
        set_vaultdata(KEY, dt);

    get_vaultdata(KEY, dt, charsmax(dt));
    if(str_to_num(dt) > day)
        return;

    new sLog[NOT_MAGIC_FILE];
    format(sLog, charsmax(sLog), "%s%s", LOG_PATH, LOG_FILE);
    mkdir(LOG_PATH);
    unlink(sLog);

    for(new i, dir, file[NOT_MAGIC_FILE]
    #if !defined ONLY_ALL
    , k, files[MAX_MASK][2][NOT_MAGIC_MASK], cnt, bool:del
    #endif
    ; i < sizeof sFiles; i ++){
        log_to_file(sLog, "======= START CLEARED %s =======", sFiles[i][PATH]);
 
        if(!(dir = open_dir(sFiles[i][PATH], file, charsmax(file)))){
            log_to_file(sLog, "Dir open ERROR!");
            log_to_file(sLog, "======= END CLEARED %s =======", sFiles[i][PATH]);
            continue;
        }
 
        #if !defined ONLY_ALL
        cnt = 0;
        if(sFiles[i][FILES][0] != '*'){
            do{
                strtok(sFiles[i][FILES], file, charsmax(file), sFiles[i][FILES], charsmax(sFiles[][FILES]), ';');
                strtok(file, files[cnt][0], charsmax(files[][]), files[cnt][1], charsmax(files[][]), '*');
         
                if(++ cnt == MAX_MASK){
                    log_to_file(sLog, "^n================- [WARNING] -================^n\
                                            Please, increase the #define MAX_MASK^n\
                                        ================- [WARNING] -================"
                    );
                    break;
                }
            }while(sFiles[i][FILES][0] != EOS);
        }
        #endif
 
        while(next_file(dir, file, charsmax(file))){
            if(file[0] == '.' || contain(file, ".") == -1 || strcmp(LOG_FILE, file) == 0)         //Папки и файлы без расширения не тронет
                continue;
     
            #if !defined ONLY_ALL
            if(cnt){
                del = false;
                for(k = 0; k < cnt; k ++){
                    if((files[k][0][0] == '?' || equal(file, files[k][0], strlen(files[k][0])))
                        && strcmp(file[strlen(file) - strlen(files[k][1])], files[k][1]) == 0)
                    {
                        del = true;
                        break;
                    }
                }
                if(!del)
                    continue;
            }
            #endif
         
            format(file, charsmax(file), "%s/%s", sFiles[i][PATH], file);
            log_to_file(sLog, "File ^"%s^" - %s removed", file, delete_file(file) ? "has been" : "was not");
        }
 
        close_dir(dir);
        log_to_file(sLog, "======= END CLEARED %s =======", sFiles[i][PATH]);
    }

    day += DAYS;
    if(day > 365)
        day -= 365;

    num_to_str(day, dt, charsmax(dt));
    set_vaultdata(KEY, dt);
}
Верх Низ