Skip to main content
Glama
orneryd

M.I.M.I.R - Multi-agent Intelligent Memory & Insight Repository

by orneryd
periodic.go4.7 kB
// Package periodic provides APOC periodic execution functions. // // This package implements all apoc.periodic.* functions for scheduled // and batch execution of operations. package periodic import ( "context" "fmt" "time" ) // Iterate executes a statement for each item in a collection. // // Example: // // apoc.periodic.iterate('MATCH (n) RETURN n', 'SET n.processed = true', {batchSize: 1000}) func Iterate(cypherIterate, cypherAction string, config map[string]interface{}) map[string]interface{} { batchSize := 1000 if bs, ok := config["batchSize"].(int); ok { batchSize = bs } parallel := false if p, ok := config["parallel"].(bool); ok { parallel = p } // Placeholder implementation return map[string]interface{}{ "batches": 0, "total": 0, "timeTaken": 0, "committedOperations": 0, "failedOperations": 0, "failedBatches": 0, "retries": 0, "errorMessages": map[string]interface{}{}, "batch": map[string]interface{}{ "total": 0, "committed": 0, "failed": 0, }, "operations": map[string]interface{}{ "total": 0, "committed": 0, "failed": 0, }, "batchSize": batchSize, "parallel": parallel, } } // Commit executes statements in batches with commits. // // Example: // // apoc.periodic.commit('MATCH (n) WHERE n.processed = false RETURN n LIMIT $limit', {limit: 1000}) func Commit(statement string, params map[string]interface{}) map[string]interface{} { limit := 1000 if l, ok := params["limit"].(int); ok { limit = l } return map[string]interface{}{ "updates": 0, "executions": 0, "runtime": 0, "batches": 0, "failedBatches": 0, "batchErrors": map[string]interface{}{}, "limit": limit, } } // Repeat executes a statement repeatedly with a delay. // // Example: // // apoc.periodic.repeat('cleanup', 'MATCH (n:Temp) DELETE n', 60) func Repeat(name, statement string, rate int64) context.CancelFunc { ctx, cancel := context.WithCancel(context.Background()) go func() { ticker := time.NewTicker(time.Duration(rate) * time.Second) defer ticker.Stop() for { select { case <-ctx.Done(): return case <-ticker.C: // Execute statement fmt.Printf("Executing periodic task '%s': %s\n", name, statement) } } }() return cancel } // Schedule schedules a statement to run at specific times. // // Example: // // apoc.periodic.schedule('backup', '0 0 * * *', 'CALL apoc.export.json.all()') func Schedule(name, cron, statement string) context.CancelFunc { ctx, cancel := context.WithCancel(context.Background()) go func() { // Parse cron expression and schedule // Placeholder - would implement cron scheduling for { select { case <-ctx.Done(): return case <-time.After(1 * time.Hour): fmt.Printf("Executing scheduled task '%s': %s\n", name, statement) } } }() return cancel } // Countdown executes a statement after a delay. // // Example: // // apoc.periodic.countdown('cleanup', 'MATCH (n:Temp) DELETE n', 300) func Countdown(name, statement string, delay int64) { go func() { time.Sleep(time.Duration(delay) * time.Second) fmt.Printf("Executing countdown task '%s': %s\n", name, statement) // Execute statement }() } // Cancel cancels a periodic task. // // Example: // // apoc.periodic.cancel('cleanup') func Cancel(name string) bool { // Placeholder - would cancel named task return true } // List lists all periodic tasks. // // Example: // // apoc.periodic.list() => [{name: 'cleanup', rate: 60, ...}] func List() []map[string]interface{} { // Placeholder - would list active tasks return []map[string]interface{}{} } // Submit submits a background job. // // Example: // // apoc.periodic.submit('job1', 'MATCH (n) RETURN count(n)') func Submit(name, statement string) map[string]interface{} { go func() { fmt.Printf("Executing background job '%s': %s\n", name, statement) // Execute statement }() return map[string]interface{}{ "name": name, "delay": 0, "rate": 0, "done": false, "cancelled": false, } } // Rock executes a statement on a schedule until stopped. // // Example: // // apoc.periodic.rock('sync', 'CALL apoc.load.json(...)', 300) func Rock(name, statement string, rate int64) context.CancelFunc { return Repeat(name, statement, rate) } // Truncate truncates large batch operations. // // Example: // // apoc.periodic.truncate({table: 'logs', batchSize: 10000}) func Truncate(config map[string]interface{}) map[string]interface{} { batchSize := 10000 if bs, ok := config["batchSize"].(int); ok { batchSize = bs } return map[string]interface{}{ "deleted": 0, "batches": 0, "batchSize": batchSize, } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/orneryd/Mimir'

If you have feedback or need assistance with the MCP directory API, please join our Discord server