| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package p
- import (
- "net/http"
- "strings"
- "sync"
- "cloud.google.com/go/bigtable"
- )
- // shared code for the various functions, primarily response formatting.
- // client is a global Bigtable client, to avoid initializing a new client for
- // every request.
- var client *bigtable.Client
- var clientOnce sync.Once
- var columnFamilies = []string{"MessagePublication", "Signatures", "VAAState", "QuorumState"}
- type (
- Summary struct {
- EmitterChain string
- EmitterAddress string
- Sequence string
- InitiatingTxID string
- Payload []byte
- GuardiansThatSigned []string
- SignedVAABytes []byte
- QuorumTime string
- }
- )
- func makeSummary(row bigtable.Row) *Summary {
- summary := &Summary{}
- if _, ok := row[columnFamilies[0]]; ok {
- for _, item := range row[columnFamilies[0]] {
- switch item.Column {
- case "MessagePublication:InitiatingTxID":
- summary.InitiatingTxID = string(item.Value)
- case "MessagePublication:Payload":
- summary.Payload = item.Value
- case "MessagePublication:EmitterChain":
- summary.EmitterChain = string(item.Value)
- case "MessagePublication:EmitterAddress":
- summary.EmitterAddress = string(item.Value)
- case "MessagePublication:Sequence":
- summary.Sequence = string(item.Value)
- }
- }
- }
- if _, ok := row[columnFamilies[1]]; ok {
- for _, item := range row[columnFamilies[1]] {
- column := strings.Split(item.Column, ":")
- summary.GuardiansThatSigned = append(summary.GuardiansThatSigned, column[1])
- }
- }
- if _, ok := row[columnFamilies[3]]; ok {
- for _, item := range row[columnFamilies[3]] {
- if item.Column == "QuorumState:SignedVAA" {
- summary.SignedVAABytes = item.Value
- summary.QuorumTime = item.Timestamp.Time().String()
- }
- }
- }
- return summary
- }
- var mux = newMux()
- // Entry is the cloud function entry point
- func Entry(w http.ResponseWriter, r *http.Request) {
- mux.ServeHTTP(w, r)
- }
- func newMux() *http.ServeMux {
- mux := http.NewServeMux()
- mux.HandleFunc("/totals", Totals)
- mux.HandleFunc("/recent", Recent)
- mux.HandleFunc("/transaction", Transaction)
- mux.HandleFunc("/readrow", ReadRow)
- mux.HandleFunc("/readyz", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) })
- return mux
- }
|