0%
Обязательно ознакомьтесь с правилами форума!
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);
}
Верх Низ