Ejemplo n.º 1
0
Archivo: aof.go Proyecto: silky/skizze
// NewAOF ...
func NewAOF(path string) *AOF {
	file, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0600)
	utils.PanicOnError(err)
	rdr := bufio.NewReader(file)
	wtr := bufio.NewWriter(file)
	return &AOF{file, bufio.NewReadWriter(rdr, wtr), sync.RWMutex{}}
}
Ejemplo n.º 2
0
func parseConfigTOML() *Config {
	cfg := &Config{}
	if _, err := toml.Decode(defaultTomlConfig, &cfg); err != nil {
		utils.PanicOnError(err)
	}

	configPath := os.Getenv("SKIZZE_CONFIG")
	if configPath != "" {
		_, err := os.Open(configPath)
		if err != nil {
			logger.Warningf("Unable to find config file, using defaults")
			return cfg
		}
		if _, err := toml.DecodeFile(configPath, &cfg); err != nil {
			logger.Warningf("Error parsing config file, using defaults")
		}
	}
	// make paths absolute
	infodir, err := utils.FullPath(cfg.InfoDir)
	if err != nil {
		panic(err)
	}
	datadir, err := utils.FullPath(cfg.DataDir)
	if err != nil {
		panic(err)
	}
	cfg.InfoDir = infodir
	cfg.DataDir = datadir
	return cfg
}
Ejemplo n.º 3
0
func parseConfigTOML() *Config {
	configPath := os.Getenv("SKZ_CONFIG")
	if configPath == "" {
		path, err := os.Getwd()
		utils.PanicOnError(err)
		path, err = filepath.Abs(path)
		utils.PanicOnError(err)
		configPath = filepath.Join(path, "src/config/default.toml")
	}
	_, err := os.Open(configPath)
	utils.PanicOnError(err)
	config = &Config{}
	if _, err := toml.DecodeFile(configPath, &config); err != nil {
		utils.PanicOnError(err)
	}
	return config
}
Ejemplo n.º 4
0
func (server *serverStruct) replay() {
	fmt.Println("Replaying ...")
	for {
		e, err := server.storage.Read()
		if err != nil && err.Error() == "EOF" {
			break
		} else {
			utils.PanicOnError(err)
		}

		switch e.Op() {
		case storage.Add:
			req := &pb.AddRequest{}
			err = proto.Unmarshal(e.Args(), req)
			utils.PanicOnError(err)
			if _, err := server.add(context.Background(), req); err != nil {
				fmt.Println(err)
			}
		case storage.CreateSketch:
			sketch := unmarshalSketch(e)
			if _, err := server.createSketch(context.Background(), sketch); err != nil {
				fmt.Println(err)
			}
		case storage.DeleteSketch:
			sketch := unmarshalSketch(e)
			if _, err := server.deleteSketch(context.Background(), sketch); err != nil {
				fmt.Println(err)
			}
		case storage.CreateDom:
			dom := unmarshalDom(e)
			if _, err := server.createDomain(context.Background(), dom); err != nil {
				fmt.Println(err)
			}
		case storage.DeleteDom:
			dom := unmarshalDom(e)
			if _, err := server.deleteDomain(context.Background(), dom); err != nil {
				fmt.Println(err)
			}
		default:
			continue
		}
	}
}
Ejemplo n.º 5
0
func (server *serverStruct) replay() {
	logger.Infof("Replaying ...")
	for {
		e, err := server.storage.Read()
		if err != nil && err.Error() == "EOF" {
			break
		} else {
			utils.PanicOnError(err)
		}

		switch e.OpType() {
		case storage.Add:
			req := &pb.AddRequest{}
			err = proto.Unmarshal(e.RawMsg(), req)
			utils.PanicOnError(err)
			if _, err := server.add(context.Background(), req); err != nil {
				logger.Errorf("an error has occurred while replaying: %s", err.Error())
			}
		case storage.CreateSketch:
			sketch := unmarshalSketch(e)
			if _, err := server.createSketch(context.Background(), sketch); err != nil {
				logger.Errorf("an error has occurred while replaying: %s", err.Error())
			}
		case storage.DeleteSketch:
			sketch := unmarshalSketch(e)
			if _, err := server.deleteSketch(context.Background(), sketch); err != nil {
				logger.Errorf("an error has occurred while replaying: %s", err.Error())
			}
		case storage.CreateDom:
			dom := unmarshalDom(e)
			if _, err := server.createDomain(context.Background(), dom); err != nil {
				logger.Errorf("an error has occurred while replaying: %s", err.Error())
			}
		case storage.DeleteDom:
			dom := unmarshalDom(e)
			if _, err := server.deleteDomain(context.Background(), dom); err != nil {
				logger.Errorf("an error has occurred while replaying: %s", err.Error())
			}
		default:
			continue
		}
	}
}
Ejemplo n.º 6
0
// GetConfig returns a singleton Configuration
func GetConfig() *Config {
	if config == nil {
		config = parseConfigTOML()
		usr, err := user.Current()
		utils.PanicOnError(err)
		dir := usr.HomeDir

		infoDir := strings.TrimSpace(os.Getenv("SKZ_INFO_DIR"))
		if len(infoDir) == 0 {
			if config.InfoDir[:2] == "~/" {
				infoDir = strings.Replace(config.InfoDir, "~", dir, 1)
			}
		}

		dataDir := strings.TrimSpace(os.Getenv("SKZ_DATA_DIR"))
		if len(dataDir) == 0 {
			if config.DataDir[:2] == "~/" {
				dataDir = strings.Replace(config.DataDir, "~", dir, 1)
			}
		}

		portInt, err := strconv.Atoi(strings.TrimSpace(os.Getenv("SKZ_PORT")))
		port := uint(portInt)
		if err != nil {
			port = config.Port
		}

		saveThresholdSecondsInt, err := strconv.Atoi(strings.TrimSpace(os.Getenv("SKZ_SAVE_TRESHOLD_SECS")))
		saveThresholdSeconds := uint(saveThresholdSecondsInt)
		if err != nil {
			saveThresholdSeconds = config.SaveThresholdSeconds
		}

		if saveThresholdSeconds < 3 {
			saveThresholdSeconds = 3
		}

		config = &Config{
			infoDir,
			dataDir,
			config.SliceSize,
			config.CacheSize,
			config.SliceCacheSize,
			port,
			saveThresholdSeconds,
		}
	}
	return config
}
Ejemplo n.º 7
0
// NewAOF ...
func NewAOF(path string) *AOF {
	file, err := os.OpenFile(path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0600)
	utils.PanicOnError(err)
	rdr := bufio.NewReader(file)
	wtr := bufio.NewWriter(file)
	inChan := make(chan *Entry, 100)
	tickChan := time.NewTicker(time.Second).C
	return &AOF{
		file:     file,
		buffer:   bufio.NewReadWriter(rdr, wtr),
		lock:     sync.RWMutex{},
		inChan:   inChan,
		tickChan: tickChan,
	}
}
Ejemplo n.º 8
0
func parseConfigTOML() *Config {
	cfg := &Config{}
	if _, err := toml.Decode(defaultTomlConfig, &cfg); err != nil {
		utils.PanicOnError(err)
	}

	configPath := os.Getenv("SKIZZE_CONFIG")
	if configPath != "" {
		_, err := os.Open(configPath)
		if err != nil {
			logger.Warningf("Unable to find config file, using defaults")
			return cfg
		}
		if _, err := toml.DecodeFile(configPath, &cfg); err != nil {
			logger.Warningf("Error parsing config file, using defaults")
		}
	}

	return cfg
}
Ejemplo n.º 9
0
// SetupTests ...
func SetupTests() {
	dataDir := fmt.Sprintf("/tmp/skizze_storage_data_test")
	infoDir := fmt.Sprintf("/tmp/skizze_storage_info_test")

	// Cleanup any previously aborted test runs
	utils.PanicOnError(os.RemoveAll(dataDir))
	utils.PanicOnError(os.RemoveAll(infoDir))

	utils.PanicOnError(os.Setenv("SKIZZE_DATA_DIR", dataDir))
	utils.PanicOnError(os.Setenv("SKIZZE_INFO_DIR", infoDir))

	utils.PanicOnError(os.Mkdir(os.Getenv("SKIZZE_DATA_DIR"), 0777))
	utils.PanicOnError(os.Mkdir(os.Getenv("SKIZZE_INFO_DIR"), 0777))

	path, err := os.Getwd()
	utils.PanicOnError(err)
	path = filepath.Dir(path)
	configPath := filepath.Join(path, "config/default.toml")
	utils.PanicOnError(os.Setenv("SKIZZE_CONFIG", configPath))
	config.DataDir = dataDir
	config.InfoDir = infoDir
}
Ejemplo n.º 10
0
Archivo: main.go Proyecto: silky/skizze
func main() {
	var port uint
	flag.UintVar(&port, "p", 3596, "specifies the port for Skizze to run on")
	flag.Parse()

	//TODO: Add arguments for dataDir and infoDir

	err := os.Setenv("SKIZZE_PORT", strconv.Itoa(int(port)))
	utils.PanicOnError(err)

	logger.Infof("Starting Skizze...")
	logger.Infof("Using data dir: %s", config.GetConfig().DataDir)
	//server, err := server.New()
	//utils.PanicOnError(err)
	//server.Run()
	mngr := manager.NewManager()
	if p, err := strconv.Atoi(os.Getenv("SKIZZE_PORT")); err == nil {
		server.Run(mngr, uint(p))
	}
}
Ejemplo n.º 11
0
func unmarshalDom(e *storage.Entry) *pb.Domain {
	dom := &pb.Domain{}
	err := proto.Unmarshal(e.Args(), dom)
	utils.PanicOnError(err)
	return dom
}
Ejemplo n.º 12
0
func unmarshalSketch(e *storage.Entry) *pb.Sketch {
	sketch := &pb.Sketch{}
	err := proto.Unmarshal(e.Args(), sketch)
	utils.PanicOnError(err)
	return sketch
}
Ejemplo n.º 13
0
// TearDownTests ...
func TearDownTests() {
	utils.PanicOnError(os.RemoveAll(os.Getenv("SKIZZE_DATA_DIR")))
	utils.PanicOnError(os.RemoveAll(os.Getenv("SKIZZE_INFO_DIR")))
	time.Sleep(50 * time.Millisecond)
	config.Reset()
}