Exemple #1
0
func cmdUpdate(args []string) int {
	v := new(version.Version)
	if len(args) < 2 {
		flag.Usage()
		fmt.Fprintf(os.Stderr, "UPDATE requires APP and VERSION\n")
		return 1
	}
	v.App = args[0]
	v.Ver = args[1]
	if len(args) > 2 {
		v.Host = args[2]
	}
	if len(args) > 3 {
		i, err := strconv.ParseUint(args[3], 10, 16)
		if err != nil {
			fmt.Println("Error parsing Intstance value:", args[3])
			return 1
		}
		v.Instance = uint16(i)
	}
	err := client.SendUDP(*server, *port, *v)
	if err != nil {
		fmt.Println(err)
		return 1
	}
	return 0
}
Exemple #2
0
func (s *SQLiteStore) Update(v version.Version) (err error) {
	if v.ExactUpdate.Before(s.threshold) {
		return
	}
	_, err = s.db.Exec(
		`insert into version(key, app_id, app, ver, host,
                    instance, host_ip, last_update, exact_update)
        values(?, ?, ?, ?, ?, ?, ?, ?, ?);`,
		v.Key(), v.AppId, v.App, v.Ver, v.Host,
		v.Instance, v.HostIP, v.LastUpdate, v.ExactUpdate.UnixNano())
	return err
}
Exemple #3
0
func (s *MemoryStore) Update(v version.Version) (err error) {
	key := v.Key()
	_, vpresent := s.version[key]
	if v.ExactUpdate.After(s.threshold) {
		s.version[key] = v
	}

	// app map
	if as, present := s.app[v.AppId]; present {
		as.LastUpdate = v.LastUpdate
		if !vpresent {
			as.HostCount++
			s.app[v.AppId] = as
		}
	} else {
		appv := version.AppSummary{
			App:        v.App,
			AppId:      v.AppId,
			LastUpdate: v.LastUpdate,
			HostCount:  1,
		}
		s.app[v.AppId] = appv
	}

	// host map
	if hs, present := s.host[v.Host]; present {
		hs.LastUpdate = v.LastUpdate
		if !vpresent {
			hs.AppCount++
			s.host[v.Host] = hs
		}
	} else {
		hostv := version.HostSummary{
			Host:       v.Host,
			LastUpdate: v.LastUpdate,
			AppCount:   1,
		}
		s.host[v.Host] = hostv
	}
	return
}
Exemple #4
0
func USTestHostSummary(s store.UpdateStore, t *testing.T) {
	v := version.Version{App: "app1", Ver: "ver", Host: "a"}
	v.Prepare()
	s.Update(v)

	if _, ok := s.Host("non-existant"); ok {
		t.Error("got ok for non-existant Host")
	}
	if as, ok := s.Host("a"); ok {
		if as.AppCount != 1 {
			t.Error("expected AppCount: 1, actual: ", as.AppCount)
		}
	} else {
		t.Error("missing expected Host")
	}

	v2 := version.Version{App: "app2", Ver: "ver", Host: "a"}
	v2.Prepare()
	s.Update(v2)
	if as, ok := s.Host("a"); ok {
		if as.AppCount != 2 {
			t.Error("expected AppCount: 2, actual: ", as.AppCount)
		}
	}
}
Exemple #5
0
func (s *SQLiteStore) Versions(AppId string, Host string, Ver string) (
	vs []version.Version, err error) {
	vs = make([]version.Version, 0)
	if AppId == "" {
		AppId = "%"
	}
	if Host == "" {
		Host = "%"
	}
	if Ver == "" {
		Ver = "%"
	}
	rows, err := s.db.Query(`
        select app_id, app, ver, host,
            instance, host_ip, last_update, exact_update
        from version
        where app_id like ?
            and host like ?
            and ver like ?;`,
		AppId, Host, Ver)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	for rows.Next() {
		v := version.Version{}
		var d int64
		err = rows.Scan(&v.AppId, &v.App, &v.Ver, &v.Host,
			&v.Instance, &v.HostIP, &v.LastUpdate, &d)
		if err != nil {
			return nil, err
		}
		v.ExactUpdate = time.Unix(0, d)
		vs = append(vs, v)
	}
	return vs, nil
}
Exemple #6
0
func USTestTrim(s store.UpdateStore, t *testing.T) {
	// setup one version in the future and a few more
	v1a := version.Version{App: "app1", Ver: "ver", Host: "a"}
	v1a.Prepare()
	v1a.ExactUpdate = v1a.ExactUpdate.Add(time.Duration(10 * time.Second))
	s.Update(v1a)

	v1b := version.Version{App: "app1", Ver: "ver", Host: "b"}
	v1b.Prepare()
	s.Update(v1b)

	v2 := version.Version{App: "app2", Ver: "ver", Host: "a"}
	v2.Prepare()
	s.Update(v2)

	// sanity check
	if vs, err := s.Versions("", "", ""); len(vs) != 3 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("before: version count - expected: 2, actual: ", len(vs))
	}
	if l, err := s.Hosts(); len(l) != 2 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("before: host count - expected: 2, actual: ", len(l))
	}
	if l, err := s.Apps(); len(l) != 2 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("before: app count - expected: 2, actual: ", len(l))
	}

	// trim every version before 1 second in the future of one version
	count, err := s.Trim(v2.ExactUpdate.Add(time.Duration(1 * time.Second)))
	if err != nil {
		t.Fatal(err)
	}
	if count != 2 {
		t.Fatal("after: trim should have removed 2 versions")
	}
	if vs, err := s.Versions("", "", ""); len(vs) != 1 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("after: version count - expected: 1, actual: ", len(vs))
	}
	if l, err := s.Hosts(); len(l) != 1 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("after: host count - expected: 1, actual: ", len(l))
	}
	if l, err := s.Apps(); len(l) != 1 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("after: app count - expected: 1, actual: ", len(l))
	}

	// trim every version
	count, err = s.Trim(v2.ExactUpdate.Add(time.Duration(20 * time.Second)))
	if err != nil {
		t.Fatal(err)
	}
	if count != 1 {
		t.Fatal("after all: trim should have removed the last one version")
	}
	if vs, err := s.Versions("", "", ""); len(vs) != 0 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal("after all: version count - expected: 0, actual: ", len(vs))
	}
	if l, err := s.Hosts(); len(l) != 0 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal(l)
		t.Fatal("after all: host count - expected: 0, actual: ", len(l))
	}
	if l, err := s.Apps(); len(l) != 0 {
		if err != nil {
			t.Fatal(err)
		}
		t.Fatal(l)
		t.Fatal("after all: app count - expected: 0, actual: ", len(l))
	}
}