@sailboat-computer/data-storage
Version:
Shared data storage library for sailboat computer v3
187 lines (168 loc) • 4.95 kB
text/typescript
/**
* Basic usage example for the data storage package
*
* This example demonstrates how to use the unified storage manager
* with local storage fallback.
*/
import {
createUnifiedStorageManager,
StorageTier,
StorageConfig,
UnifiedStorageManagerOptions
} from '../src';
async function main() {
console.log('Data Storage Package - Basic Usage Example');
console.log('------------------------------------------');
// Create storage configuration
const config: StorageConfig = {
providers: {
hot: {
type: 'redis',
config: {
host: 'localhost',
port: 6379,
password: '',
db: 0,
tls: false
}
},
warm: {
type: 'influxdb',
config: {
url: 'http://localhost:8086',
token: 'your-token',
org: 'sailboat-computer',
bucket: 'sensor-data'
}
},
cold: {
type: 'postgresql',
config: {
host: 'localhost',
port: 5432,
database: 'sailboat_data',
user: 'postgres',
password: 'postgres',
ssl: false
}
},
batching: {
timeBased: {
enabled: true,
intervalMs: 5000
},
sizeBased: {
enabled: true,
maxBatchSize: 100
},
priorityOverride: true
}
}
};
// Create unified storage manager options
const options: Partial<UnifiedStorageManagerOptions> = {
localStorage: {
directory: './data',
maxSizeBytes: 100 * 1024 * 1024, // 100MB
encrypt: false,
compressionLevel: 6
},
sync: {
enabled: true,
intervalMs: 60000, // 1 minute
batchSize: 100
},
resilience: {
circuitBreaker: {
failureThreshold: 3,
resetTimeoutMs: 30000 // 30 seconds
},
retry: {
maxRetries: 3,
baseDelayMs: 1000 // 1 second
},
timeout: {
defaultTimeoutMs: 5000, // 5 seconds
operationTimeouts: {
store: 10000, // 10 seconds
retrieve: 15000, // 15 seconds
update: 10000, // 10 seconds
delete: 5000, // 5 seconds
storeBatch: 30000, // 30 seconds
retrieveBatch: 30000, // 30 seconds
cleanup: 60000, // 60 seconds
migrate: 60000 // 60 seconds
}
}
},
logger: {
level: 'info',
console: true
}
};
try {
// Create unified storage manager
console.log('Creating unified storage manager...');
const storageManager = createUnifiedStorageManager(config, options);
// Initialize storage manager
console.log('Initializing storage manager...');
await storageManager.initialize();
// Store data
console.log('Storing data...');
const sensorData = {
sensorId: 'temp-sensor-1',
value: 25.5,
unit: 'celsius',
timestamp: new Date(),
quality: 'good'
};
const id = await storageManager.store(sensorData, 'sensor-readings', {
timestamp: new Date(),
tags: {
location: 'cabin',
sensor: 'temperature'
},
tier: StorageTier.HOT
});
console.log(`Data stored with ID: ${id}`);
// Retrieve data
console.log('Retrieving data...');
const results = await storageManager.retrieve({
category: 'sensor-readings',
timeRange: {
start: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(), // Last 24 hours
end: new Date().toISOString()
},
sort: {
field: 'timestamp',
order: 'desc'
}
});
console.log(`Retrieved ${results.length} results:`);
console.log(JSON.stringify(results, null, 2));
// Get storage status
console.log('Getting storage status...');
const status = await storageManager.getStatus();
console.log('Storage status:', JSON.stringify(status, null, 2));
// Get local storage status
console.log('Getting local storage status...');
const localStatus = await storageManager.getLocalStorageStatus();
console.log('Local storage status:', JSON.stringify(localStatus, null, 2));
// Force synchronization
console.log('Forcing synchronization...');
const syncResult = await storageManager.forceSynchronization();
console.log('Synchronization result:', JSON.stringify(syncResult, null, 2));
// Get resilience metrics
console.log('Getting resilience metrics...');
const metrics = storageManager.getResilienceMetrics();
console.log('Resilience metrics:', JSON.stringify(metrics, null, 2));
// Close storage manager
console.log('Closing storage manager...');
await storageManager.close();
console.log('Example completed successfully!');
} catch (error) {
console.error('Error:', error);
}
}
// Run the example
main().catch(console.error);