@dispatch9/client-sdk
Version:
Official Node.js SDK for Dispatch9 API - Complete solution with email/phone client creation, order management, client management, and dual-method authentication
162 lines (136 loc) ⢠5.8 kB
JavaScript
require('dotenv').config();
const { Dispatch9Client } = require('../src');
async function analyticsExample() {
const client = new Dispatch9Client({
apiKey: process.env.DISPATCH9_API_KEY,
baseURL: process.env.DISPATCH9_BASE_URL || 'http://localhost:3001',
debug: true
});
try {
console.log('š Testing Analytics with Dispatch9 SDK\n');
// Get dashboard analytics
console.log('š Fetching dashboard analytics...');
try {
const analytics = await client.getAnalytics({
startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // 30 days ago
endDate: new Date(),
granularity: 'day'
});
console.log('š Dashboard Analytics:');
if (analytics.summary) {
console.log(` Total Orders: ${analytics.summary.totalOrders || 0}`);
console.log(` Completed Orders: ${analytics.summary.completedOrders || 0}`);
console.log(` Success Rate: ${analytics.summary.successRate || 0}%`);
console.log(` Average Delivery Time: ${analytics.summary.avgDeliveryTime || 'N/A'}`);
}
if (analytics.trends && analytics.trends.length > 0) {
console.log(' Recent Trends:');
analytics.trends.slice(0, 5).forEach((trend, index) => {
console.log(` ${trend.date}: ${trend.orders} orders`);
});
}
} catch (analyticsError) {
console.log('ā¹ļø Dashboard analytics not available or insufficient data');
}
console.log();
// Get performance metrics
console.log('ā” Fetching performance metrics...');
try {
const performance = await client.getPerformanceMetrics({
period: 'last30days'
});
console.log('šÆ Performance Metrics:');
if (performance.deliveryMetrics) {
console.log(` On-Time Delivery Rate: ${performance.deliveryMetrics.onTimeRate || 0}%`);
console.log(` Average Delivery Time: ${performance.deliveryMetrics.avgTime || 'N/A'}`);
console.log(` Failed Deliveries: ${performance.deliveryMetrics.failureRate || 0}%`);
}
if (performance.workerMetrics) {
console.log(` Active Workers: ${performance.workerMetrics.activeCount || 0}`);
console.log(` Average Orders per Worker: ${performance.workerMetrics.avgOrdersPerWorker || 0}`);
}
} catch (performanceError) {
console.log('ā¹ļø Performance metrics not available');
}
console.log();
// Get order statistics
console.log('š¦ Fetching order statistics...');
try {
const orderStats = await client.getOrderStats({
groupBy: 'status',
period: 'last7days'
});
console.log('š Order Statistics (Last 7 Days):');
if (orderStats.byStatus) {
Object.entries(orderStats.byStatus).forEach(([status, count]) => {
console.log(` ${status.charAt(0).toUpperCase() + status.slice(1)}: ${count}`);
});
}
if (orderStats.byPriority) {
console.log(' By Priority:');
Object.entries(orderStats.byPriority).forEach(([priority, count]) => {
console.log(` ${priority}: ${count}`);
});
}
} catch (statsError) {
console.log('ā¹ļø Order statistics not available');
}
console.log();
// Get recent activity summary
console.log('š Getting recent activity...');
const recentOrders = await client.getOrders({
limit: 10,
sortBy: 'createdAt:desc'
});
console.log('š Recent Activity Summary:');
console.log(` Total Orders in System: ${recentOrders.totalResults || 0}`);
if (recentOrders.results && recentOrders.results.length > 0) {
// Analyze recent orders
const statusCounts = {};
const priorityCounts = {};
recentOrders.results.forEach(order => {
statusCounts[order.status] = (statusCounts[order.status] || 0) + 1;
priorityCounts[order.priority || 'normal'] = (priorityCounts[order.priority || 'normal'] || 0) + 1;
});
console.log(' Recent Orders Breakdown:');
Object.entries(statusCounts).forEach(([status, count]) => {
console.log(` ${status}: ${count}`);
});
console.log(' Priority Distribution:');
Object.entries(priorityCounts).forEach(([priority, count]) => {
console.log(` ${priority}: ${count}`);
});
// Show latest order
const latestOrder = recentOrders.results[0];
console.log(` Latest Order: #${latestOrder.orderNumber || latestOrder.id} (${latestOrder.status})`);
}
console.log();
// Worker activity
console.log('š Checking worker activity...');
const workers = await client.getWorkers({ limit: 5 });
console.log('š„ Worker Overview:');
console.log(` Total Workers: ${workers.totalResults || 0}`);
if (workers.results && workers.results.length > 0) {
console.log(' Recent Workers:');
workers.results.forEach((worker, index) => {
console.log(` ${index + 1}. ${worker.name} - ${worker.status || 'Unknown'}`);
});
}
console.log();
console.log('ā
Analytics example completed successfully!');
console.log('\nš” Tips:');
console.log(' - Analytics data depends on your organization\'s activity');
console.log(' - Some metrics may not be available for new accounts');
console.log(' - Check your API key permissions if data is missing');
} catch (error) {
console.error('ā Error:', error.message);
if (error.message.includes('API key')) {
console.log('\nš” Make sure your API key has analytics read permissions');
}
}
}
// Run the example
if (require.main === module) {
analyticsExample();
}
module.exports = analyticsExample;