自动清理zendesk缓存的脚本

wen 实用脚本 20

本文目录导读:

自动清理zendesk缓存的脚本

  1. Python 脚本版本
  2. Bash Shell 脚本版本
  3. 配置说明
  4. 注意事项

Python 脚本版本

#!/usr/bin/env python3
"""
Zendesk 缓存自动清理脚本
支持多种缓存清理方式
"""
import requests
import json
import time
from datetime import datetime
import logging
# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
class ZendeskCacheCleaner:
    def __init__(self, subdomain, email, api_token):
        """
        初始化 Zendesk 缓存清理器
        :param subdomain: Zendesk 子域名
        :param email: 管理员邮箱
        :param api_token: API Token
        """
        self.base_url = f"https://{subdomain}.zendesk.com"
        self.auth = (f"{email}/token", api_token)
        self.headers = {
            "Content-Type": "application/json"
        }
    def clear_cache(self, cache_type='all'):
        """
        清除 Zendesk 缓存
        :param cache_type: 缓存类型 ('all', 'ticket', 'user', 'organization')
        :return: bool
        """
        try:
            endpoints = {
                'all': '/api/v2/cache/clear.json',
                'ticket': '/api/v2/cache/clear/tickets.json',
                'user': '/api/v2/cache/clear/users.json',
                'organization': '/api/v2/cache/clear/organizations.json'
            }
            if cache_type not in endpoints:
                logger.error(f"不支持的缓存类型: {cache_type}")
                return False
            url = self.base_url + endpoints[cache_type]
            response = requests.delete(url, auth=self.auth, headers=self.headers)
            if response.status_code == 200:
                logger.info(f"成功清除 {cache_type} 缓存")
                return True
            else:
                logger.error(f"清除失败: {response.status_code} - {response.text}")
                return False
        except Exception as e:
            logger.error(f"清除缓存异常: {str(e)}")
            return False
    def verify_cache_status(self):
        """
        验证缓存状态
        """
        try:
            url = f"{self.base_url}/api/v2/cache.json"
            response = requests.get(url, auth=self.auth, headers=self.headers)
            if response.status_code == 200:
                cache_info = response.json()
                logger.info(f"当前缓存状态: {json.dumps(cache_info, indent=2)}")
                return cache_info
            else:
                logger.error(f"获取缓存状态失败: {response.status_code}")
                return None
        except Exception as e:
            logger.error(f"获取缓存状态异常: {str(e)}")
            return None
def scheduled_clean(subdomain, email, api_token, interval_hours=24):
    """
    定时清理缓存
    :param subdomain: Zendesk 子域名
    :param email: 管理员邮箱
    :param api_token: API Token
    :param interval_hours: 清理间隔(小时)
    """
    cleaner = ZendeskCacheCleaner(subdomain, email, api_token)
    while True:
        try:
            logger.info(f"开始定时清理 - {datetime.now()}")
            # 清除所有缓存
            if cleaner.clear_cache('all'):
                # 验证清理结果
                cleaner.verify_cache_status()
            logger.info(f"等待 {interval_hours} 小时后再次清理...")
            time.sleep(interval_hours * 3600)
        except KeyboardInterrupt:
            logger.info("定时清理任务已停止")
            break
        except Exception as e:
            logger.error(f"定时清理异常: {str(e)}")
            time.sleep(3600)  # 出错后等待1小时重试
def main():
    """
    主函数
    """
    # 配置信息 - 请替换为实际值
    CONFIG = {
        'subdomain': 'your_subdomain',  # 替换为你的子域名
        'email': 'admin@example.com',   # 替换为管理员邮箱
        'api_token': 'your_api_token',  # 替换为 API Token
        'interval_hours': 24            # 清理间隔(小时)
    }
    cleaner = ZendeskCacheCleaner(
        CONFIG['subdomain'],
        CONFIG['email'],
        CONFIG['api_token']
    )
    # 手动清理
    logger.info("开始手动清理缓存...")
    cleaner.clear_cache('all')
    # 验证缓存状态
    cache_status = cleaner.verify_cache_status()
    # 可选:启动定时清理
    # scheduled_clean(
    #     CONFIG['subdomain'],
    #     CONFIG['email'],
    #     CONFIG['api_token'],
    #     CONFIG['interval_hours']
    # )
if __name__ == "__main__":
    main()

Bash Shell 脚本版本

#!/bin/bash
# Zendesk 缓存自动清理脚本
# 适用于 Linux/Unix 系统
# 配置变量
ZENDESK_SUBDOMAIN="your_subdomain"
ZENDESK_EMAIL="admin@example.com"
ZENDESK_API_TOKEN="your_api_token"
# 日志文件
LOG_FILE="/var/log/zendesk_cache_clean.log"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_message() {
    local level=$1
    local message=$2
    local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
    case $level in
        "INFO")
            echo -e "${GREEN}[${timestamp}] [INFO] ${message}${NC}" | tee -a $LOG_FILE
            ;;
        "WARN")
            echo -e "${YELLOW}[${timestamp}] [WARN] ${message}${NC}" | tee -a $LOG_FILE
            ;;
        "ERROR")
            echo -e "${RED}[${timestamp}] [ERROR] ${message}${NC}" | tee -a $LOG_FILE
            ;;
        *)
            echo "[${timestamp}] [${level}] ${message}" | tee -a $LOG_FILE
            ;;
    esac
}
# 清理缓存函数
clear_zendesk_cache() {
    local cache_type=$1
    local endpoint=""
    case $cache_type in
        "all")
            endpoint="/api/v2/cache/clear.json"
            ;;
        "tickets")
            endpoint="/api/v2/cache/clear/tickets.json"
            ;;
        "users")
            endpoint="/api/v2/cache/clear/users.json"
            ;;
        "organizations")
            endpoint="/api/v2/cache/clear/organizations.json"
            ;;
        *)
            log_message "ERROR" "不支持的缓存类型: $cache_type"
            return 1
            ;;
    esac
    local url="https://${ZENDESK_SUBDOMAIN}.zendesk.com${endpoint}"
    log_message "INFO" "开始清除 ${cache_type} 缓存..."
    # 发送 API 请求
    response=$(curl -s -o /dev/null -w "%{http_code}" \
        -X DELETE \
        -u "${ZENDESK_EMAIL}/token:${ZENDESK_API_TOKEN}" \
        -H "Content-Type: application/json" \
        "$url")
    if [ "$response" -eq 200 ]; then
        log_message "INFO" "成功清除 ${cache_type} 缓存"
        return 0
    else
        log_message "ERROR" "清除 ${cache_type} 缓存失败,HTTP状态码: $response"
        return 1
    fi
}
# 获取缓存状态
get_cache_status() {
    local url="https://${ZENDESK_SUBDOMAIN}.zendesk.com/api/v2/cache.json"
    log_message "INFO" "获取缓存状态..."
    response=$(curl -s \
        -X GET \
        -u "${ZENDESK_EMAIL}/token:${ZENDESK_API_TOKEN}" \
        -H "Content-Type: application/json" \
        "$url")
    if [ $? -eq 0 ]; then
        log_message "INFO" "缓存状态: $response"
        return 0
    else
        log_message "ERROR" "获取缓存状态失败"
        return 1
    fi
}
# 主清理流程
main_cleanup() {
    log_message "INFO" "========== 开始 Zendesk 缓存清理 =========="
    # 获取清理前的缓存状态
    get_cache_status
    # 清理所有缓存
    clear_zendesk_cache "all"
    # 清理特定缓存
    clear_zendesk_cache "tickets"
    clear_zendesk_cache "users"
    clear_zendesk_cache "organizations"
    # 获取清理后的缓存状态
    get_cache_status
    log_message "INFO" "========== Zendesk 缓存清理完成 =========="
}
# 定时清理(使用 cron)
setup_cron() {
    local interval_hours=$1
    log_message "INFO" "设置定时清理任务(每 ${interval_hours} 小时执行一次)"
    # 添加 cron 任务
    cron_command="0 */${interval_hours} * * * /path/to/$(basename $0) cleanup"
    # 检查是否已存在相同的 cron 任务
    if crontab -l 2>/dev/null | grep -q "zendesk_cache_clean"; then
        log_message "INFO" "已存在定时清理任务"
    else
        (crontab -l 2>/dev/null; echo "$cron_command") | crontab -
        log_message "INFO" "已添加定时清理任务"
    fi
}
# 主函数
main() {
    # 检查配置
    if [ "$ZENDESK_SUBDOMAIN" = "your_subdomain" ]; then
        log_message "ERROR" "请先配置 Zendesk 子域名"
        exit 1
    fi
    case "${1:-cleanup}" in
        "cleanup")
            main_cleanup
            ;;
        "status")
            get_cache_status
            ;;
        "setup-cron")
            setup_cron "${2:-24}"
            ;;
        *)
            echo "使用方法: $0 [cleanup|status|setup-cron]"
            echo "  cleanup     - 执行缓存清理(默认)"
            echo "  status      - 查看缓存状态"
            echo "  setup-cron  - 设置定时清理(可选参数:间隔小时数,默认24)"
            exit 1
            ;;
    esac
}
# 执行主函数
main "$@"

配置说明

获取 API Token:

  1. 登录 Zendesk Admin Center
  2. 转到 Apps and integrations > Zendesk API
  3. 启用 Token Access
  4. 创建新的 API Token

使用方式:

Python 脚本:

# 安装依赖
pip install requests
# 修改配置文件中的参数
# 运行脚本
python zendesk_cache_clean.py

Bash 脚本:

# 赋予执行权限
chmod +x zendesk_clean.sh
# 执行清理
./zendesk_clean.sh cleanup
# 查看缓存状态
./zendesk_clean.sh status
# 设置24小时间隔的定时清理
./zendesk_clean.sh setup-cron 24

注意事项

  1. 权限要求:需要 Zendesk 管理员权限
  2. API 限制:注意 Zendesk API 调用频率限制
  3. 缓存影响:清理缓存可能暂时影响系统性能
  4. 测试环境:建议先在测试环境验证
  5. 备份配置:重要操作前备份相关配置

请根据实际需求修改配置参数和清理策略。

抱歉,评论功能暂时关闭!