Пример #1
0
func (peer *Peer) Handler(m *pat.PatternServeMux) {
	m.Get("/stats", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		stats := httpclient.JsonData{
			"ring":       peer.ring.GetNodes(),
			"vnodeCount": peer.node.VnodeCount(),
			"vnodeSize":  peer.node.VnodeSize(),
			"vnodeStart": peer.node.VnodeStart(),
		}

		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(200)
		io.WriteString(w, stats.Encode())
	}))

	m.Put("/ring", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		data := map[string][]string{}
		json.Unmarshal(body, &data)

		peer.ring.SetNodes(data["ring"])
		peer.node = peer.ring.Get(peer.url)

		w.WriteHeader(201)
	}))

	m.Put("/peers", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		newPeerURL := string(body)

		if peer.peerExists(newPeerURL) {
			w.WriteHeader(409)
		} else {
			peer.addPeer(newPeerURL)
			w.WriteHeader(201)
		}
	}))

	m.Put("/peers/join", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		newPeerURL := string(body)

		if peer.peerExists(newPeerURL) {
			w.WriteHeader(409)
		} else {
			peer.join(newPeerURL)
			w.WriteHeader(201)
		}
	}))

	m.Get("/peers", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		if peer.HasPeer() {
			w.Header().Set("Content-Type", "application/json")
			w.WriteHeader(200)
			io.WriteString(w, httpclient.JsonData{"peers": peer.Peers}.Encode())
		} else {
			w.WriteHeader(404)
		}
	}))
}
Пример #2
0
func (self *HttpServer) registerEndpoint(p *pat.PatternServeMux, method string, pattern string, f libhttp.HandlerFunc) {
	switch method {
	case "get":
		p.Get(pattern, CorsHeaderHandler(f))
	case "post":
		p.Post(pattern, CorsHeaderHandler(f))
	case "del":
		p.Del(pattern, CorsHeaderHandler(f))
	}
	p.Options(pattern, CorsHeaderHandler(self.sendCrossOriginHeader))
}
Пример #3
0
func (self *HttpServer) registerEndpoint(p *pat.PatternServeMux, method string, pattern string, f libhttp.HandlerFunc) {
	version := self.clusterConfig.GetLocalConfiguration().Version
	switch method {
	case "get":
		p.Get(pattern, HeaderHandler(f, version))
	case "post":
		p.Post(pattern, HeaderHandler(f, version))
	case "del":
		p.Del(pattern, HeaderHandler(f, version))
	}
	p.Options(pattern, HeaderHandler(self.sendCrossOriginHeader, version))
}
Пример #4
0
func registerEndpoint(ep apihttp.Endpoint, mux *pat.PatternServeMux) {
	switch ep.Method {
	case "GET":
		mux.Get(ep.Pattern, ep.Handler)
	case "POST":
		mux.Post(ep.Pattern, ep.Handler)
	case "HEAD":
		mux.Head(ep.Pattern, ep.Handler)
	case "PUT":
		mux.Put(ep.Pattern, ep.Handler)
	case "DEL":
		mux.Del(ep.Pattern, ep.Handler)
	case "OPTIONS":
		mux.Options(ep.Pattern, ep.Handler)
	}
}
Пример #5
0
func registerEndpoint(ep apihttp.Endpoint, mux *pat.PatternServeMux) {
	mux.Add(ep.Method, ep.Pattern, ep.Handler)
	if ep.Method == "GET" {
		mux.Add("HEAD", ep.Pattern, ep.Handler)
	}
}
Пример #6
0
func BindReading(m *pat.PatternServeMux) {
	m.Get(readingInfo, http.HandlerFunc(infoReading))
}
Пример #7
0
func handleAll(mux *pat.PatternServeMux, pattern string, handler http.Handler) {
	mux.Get(pattern, handler)
	mux.Post(pattern, handler)
	mux.Head(pattern, handler)
	mux.Put(pattern, handler)
	mux.Del(pattern, handler)
	mux.Options(pattern, handler)
}
Пример #8
0
func BindSubmission(p *pat.PatternServeMux) {
	p.Get(submissionInfo, http.HandlerFunc(infoSubmission))
	p.Get(subGetOne, http.HandlerFunc(getOneSub))
}
Пример #9
0
func BindComments(p *pat.PatternServeMux) {
	p.Get(commentsInfo, http.HandlerFunc(infoComments))
}
Пример #10
0
func AddHandlers(m *pat.PatternServeMux, base string) {

	// Movies
	m.Get(base+"/movies", JsonHandler(MovieList))
	m.Get(base+"/movies/:id", JsonHandler(MovieShow))
	m.Put(base+"/movies", JsonHandler(MovieCreate))
	m.Del(base+"/movies/:id", JsonHandler(MovieDelete))

	// Libraries
	m.Get(base+"/libraries", JsonHandler(LibraryList))
	m.Get(base+"/libraries/:id", JsonHandler(LibraryShow))
	m.Put(base+"/libraries", JsonHandler(LibraryCreate))
	m.Del(base+"/libraries/:id", JsonHandler(LibraryDelete))
	m.Get(base+"/libraries/:id/process", JsonHandler(LibraryProcess))

	// Series
	m.Get(base+"/series", JsonHandler(SeriesList))
	m.Get(base+"/series/:id", JsonHandler(SeriesShow))
	m.Put(base+"/series", JsonHandler(SeriesCreate))
	m.Del(base+"/series/:id", JsonHandler(SeriesDelete))

	// Series season
	m.Get(base+"/series/:id/seasons", JsonHandler(SeasonsList))

	// Series Episodes
	m.Get(base+"/series/:series_id/seasons/:season_num/episodes", JsonHandler(EpisodeList))

	// Episode
	m.Get(base+"/episodes/:id", JsonHandler(EpisodeShow))
	m.Put(base+"/episodes", JsonHandler(EpisodeCreate))
	m.Del(base+"/episodes/:id", JsonHandler(EpisodeDelete))
	m.Get(base+"/series/:id/episodes", JsonHandler(SeriesEpisodeList))
}
Пример #11
0
func BindVote(m *pat.PatternServeMux) {
	m.Get(voteInfo, http.HandlerFunc(infoVote))
}
Пример #12
0
func (blueprint *apiBlueprint) AddRoutes(p *pat.PatternServeMux) {
	p.Get(blueprint.base, http.HandlerFunc(blueprint.handleGet))
}
Пример #13
0
func (peer *Peer) Handler(m *pat.PatternServeMux) {
	m.Get("/stats", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		stats := httpclient.JsonData{
			"ring":       peer.ring.GetNodes(),
			"vnodeCount": peer.node.VnodeCount(),
			"vnodeSize":  peer.node.VnodeSize(),
			"vnodeStart": peer.node.VnodeStart(),
			"nValue":     peer.ring.GetNValue(),
		}

		w.Header().Set("Content-Type", "application/json")
		w.WriteHeader(200)
		io.WriteString(w, stats.Encode())
	}))

	m.Put("/ring", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		data := map[string][]string{}
		json.Unmarshal(body, &data)

		peer.ring.SetNodes(data["ring"])
		peer.node = peer.ring.Get(peer.url)

		peer.evaluateKeyOwnership()

		w.WriteHeader(201)
	}))

	m.Put("/settings/set/n", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		n, err := strconv.Atoi(string(body))

		if err == nil {
			peer.ring.SetNValue(n)
			w.WriteHeader(201)
		} else {
			w.WriteHeader(422)
		}
	}))

	m.Put("/settings/n", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		n, err := strconv.Atoi(string(body))

		if err == nil && n < peer.peerCount() {
			peer.ring.SetNValue(n)
			for _, p := range peer.Peers {
				httpclient.Put(p+"/settings/set/n", string(body))
			}
			w.WriteHeader(201)
		} else {
			w.WriteHeader(422)
		}
	}))

	m.Put("/peers", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		newPeerURL := string(body)

		if peer.peerExists(newPeerURL) {
			w.WriteHeader(409)
		} else {
			peer.addPeer(newPeerURL)
			w.WriteHeader(201)
		}
	}))

	m.Put("/peers/join", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		body, _ := ioutil.ReadAll(request.Body)
		newPeerURL := string(body)

		peer.logger.Printf("%s requesting to join", newPeerURL)

		if peer.peerExists(newPeerURL) {
			w.WriteHeader(409)
		} else {
			peer.join(newPeerURL)
			w.WriteHeader(201)
		}
	}))

	m.Get("/peers", http.HandlerFunc(func(w http.ResponseWriter, request *http.Request) {
		if peer.HasPeer() {
			w.Header().Set("Content-Type", "application/json")
			w.WriteHeader(200)
			io.WriteString(w, httpclient.JsonData{"peers": peer.Peers}.Encode())
		} else {
			w.WriteHeader(404)
		}
	}))
}
Пример #14
0
func (blueprint *adminBlueprint) AddRoutes(p *pat.PatternServeMux) {
	p.Get(blueprint.base+"/config", http.HandlerFunc(blueprint.configHandler))
	p.Get(blueprint.base+"/errors", http.HandlerFunc(blueprint.errorsHandler))
	p.Get(blueprint.base+"/metrics", http.HandlerFunc(blueprint.metricsHandler))
}
Пример #15
0
func AddHandlers(m *pat.PatternServeMux, base string) {

	// Movies
	m.Get(base+"/movies", JsonHandler(MovieList))
	m.Get(base+"/movies/:id", JsonHandler(MovieShow))
	m.Put(base+"/movies", JsonHandler(MovieCreate))
	m.Del(base+"/movies/:id", JsonHandler(MovieDelete))

	// Libraries
	m.Get(base+"/libraries", JsonHandler(LibraryList))
	m.Get(base+"/libraries/:id", JsonHandler(LibraryShow))
	m.Put(base+"/libraries", JsonHandler(LibraryCreate))
	m.Del(base+"/libraries/:id", JsonHandler(LibraryDelete))
}