chaos/cmd/chaos/chaos.go

111 lines
2.5 KiB
Go

package main
import (
"encoding/json"
"fmt"
"git.openprivacy.ca/sarah/chaos"
"io/ioutil"
"os"
"path"
)
func cmd_new(args []string) {
if len(args) == 2 {
template_path := path.Join(args[0] + ".cst")
if _, err := os.Stat(template_path); err == nil {
data, _ := ioutil.ReadFile(template_path)
template := chaos.NewTemplate()
err := json.Unmarshal(data, template)
if err == nil {
odata, _ := json.Marshal(template)
tpath := path.Join(".", ".chaos", args[1])
ioutil.WriteFile(tpath, odata, 0644)
} else {
fmt.Printf("Could not parse template for %v", args[0])
}
} else {
fmt.Printf("No template found for %v", args[0])
}
}
}
func cmd(cmd string, args []string) {
path := path.Join(".", ".chaos", args[0])
if _, err := os.Stat(path); err == nil {
data, _ := ioutil.ReadFile(path)
template := chaos.NewTemplate()
err := json.Unmarshal(data, template)
if err != nil {
fmt.Printf("could not execute \"%v\" on %v", cmd, args[0])
}
template.ExecCmd(cmd, args[1])
json, _ := json.Marshal(template)
ioutil.WriteFile(path, json, 0644)
} else {
fmt.Printf("Chaos structure \"%v\" does not exist\n", args[1])
return
}
}
func cmd_lookup(args []string) {
if len(args) == 2 {
path := path.Join(".", ".chaos", args[0])
if _, err := os.Stat(path); err == nil {
data, _ := ioutil.ReadFile(path)
template := chaos.NewTemplate()
err := json.Unmarshal(data, template)
if err != nil {
fmt.Printf("Cannot parse \"%v\"", args[0])
return
}
fmt.Printf("%v\n", template.Lookup(args[1]))
} else {
fmt.Printf("Chaos structure \"%v\" does not exist\n", args[0])
return
}
} else {
fmt.Printf("Usage: chaos lookup <structure> <key>\n")
}
}
func cmd_len(args []string) {
if len(args) == 2 {
path := path.Join(".", ".chaos", args[0])
if _, err := os.Stat(path); err == nil {
data, _ := ioutil.ReadFile(path)
template := chaos.NewTemplate()
err := json.Unmarshal(data, template)
if err != nil {
fmt.Printf("Cannot parse \"%v\"", args[0])
return
}
fmt.Printf("%v\n", template.Len(args[1]))
} else {
fmt.Printf("Chaos structure \"%v\" does not exist\n", args[0])
return
}
} else {
fmt.Printf("Usage: chaos lookup <structure> <key>\n")
}
}
func main() {
if len(os.Args) >= 2 {
switch os.Args[1] {
case "init":
os.Mkdir("./.chaos", 0755)
case "new":
cmd_new(os.Args[2:])
case "lookup":
cmd_lookup(os.Args[2:])
case "len":
cmd_len(os.Args[2:])
default:
cmd(os.Args[1], os.Args[2:])
}
os.Exit(0)
}
os.Exit(1)
}