码桶

发现社区成员的开源项目

dns-analytics.js1.4 KB
export async function onRequestGet(context) {
    const { cfHeaders } = context.data;
    const { zoneId } = context.params;
    const url = new URL(context.request.url);
    const sinceMinutes = parseInt(url.searchParams.get('since') || '-1440');

    // Convert relative minutes to ISO 8601 timestamps
    const now = new Date();
    const sinceDate = new Date(now.getTime() + sinceMinutes * 60 * 1000);
    const sinceISO = sinceDate.toISOString();
    const untilISO = now.toISOString();

    try {
        const res = await fetch(`https://api.cloudflare.com/client/v4/zones/${zoneId}/dns_analytics/report?dimensions=queryType,responseCode&since=${sinceISO}&until=${untilISO}`, {
            headers: { ...cfHeaders, 'Content-Type': 'application/json' }
        });
        const data = await res.json();
        if (data.success) {
            return new Response(JSON.stringify({
                success: true,
                data: data.result || {},
                errors: []
            }), { headers: { 'Content-Type': 'application/json' } });
        }
        return new Response(JSON.stringify({ success: false, errors: data.errors || [] }), { status: 400, headers: { 'Content-Type': 'application/json' } });
    } catch (e) {
        return new Response(JSON.stringify({ success: false, errors: [{ message: e.message || 'Failed to fetch DNS analytics' }] }), { status: 500, headers: { 'Content-Type': 'application/json' } });
    }
}