basic stats

release-0.4
Xiang Li 2013-08-19 17:19:45 -07:00
parent dd2f856d63
commit a97590ff50
9 changed files with 54 additions and 28 deletions

View File

@ -4,12 +4,13 @@ import (
"encoding/binary"
"encoding/json"
"fmt"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
"os"
"path"
"time"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
)
const commandPrefix = "etcd:"
@ -168,6 +169,7 @@ func (c *JoinCommand) Apply(raftServer *raft.Server) (interface{}, error) {
key := path.Join("_etcd/machines", c.Name)
value := fmt.Sprintf("raft=%s&etcd=%s&raftVersion=%s", c.RaftURL, c.EtcdURL, c.RaftVersion)
etcdStore.Set(key, value, time.Unix(0, 0), raftServer.CommitIndex())
r.peersStats[c.Name] = &peerStats{}
return b, err
}
@ -193,6 +195,7 @@ func (c *RemoveCommand) Apply(raftServer *raft.Server) (interface{}, error) {
key := path.Join("_etcd/machines", c.Name)
_, err := etcdStore.Delete(key, raftServer.CommitIndex())
r.peersStats[c.Name] = nil
if err != nil {
return []byte{0}, err

View File

@ -3,12 +3,13 @@ package main
import (
"crypto/tls"
"flag"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
"io/ioutil"
"os"
"strings"
"time"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
)
//------------------------------------------------------------------------------

View File

@ -2,12 +2,13 @@ package main
import (
"fmt"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
"net/http"
"strconv"
"strings"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/etcd/store"
"github.com/coreos/go-raft"
)
//-------------------------------------------------------------------
@ -207,6 +208,7 @@ func VersionHttpHandler(w http.ResponseWriter, req *http.Request) error {
func StatsHttpHandler(w http.ResponseWriter, req *http.Request) error {
w.WriteHeader(http.StatusOK)
w.Write(etcdStore.Stats())
w.Write(r.Stats())
return nil
}

View File

@ -2,8 +2,6 @@ package main
import (
"fmt"
"github.com/coreos/etcd/test"
"github.com/coreos/go-etcd/etcd"
"math/rand"
"net/http"
"net/http/httptest"
@ -13,6 +11,9 @@ import (
"strings"
"testing"
"time"
"github.com/coreos/etcd/test"
"github.com/coreos/go-etcd/etcd"
)
// Create a single node and try to set value

View File

@ -2,8 +2,9 @@ package main
import (
"encoding/json"
"github.com/coreos/go-raft"
"net/http"
"github.com/coreos/go-raft"
)
//-------------------------------------------------------------

View File

@ -6,22 +6,24 @@ import (
"encoding/binary"
"encoding/json"
"fmt"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/go-raft"
"io/ioutil"
"net/http"
"net/url"
"time"
etcdErr "github.com/coreos/etcd/error"
"github.com/coreos/go-raft"
)
type raftServer struct {
*raft.Server
version string
joinIndex uint64
name string
url string
tlsConf *TLSConfig
tlsInfo *TLSInfo
version string
joinIndex uint64
name string
url string
tlsConf *TLSConfig
tlsInfo *TLSInfo
peersStats map[string]*peerStats
}
var r *raftServer
@ -37,12 +39,13 @@ func newRaftServer(name string, url string, tlsConf *TLSConfig, tlsInfo *TLSInfo
check(err)
return &raftServer{
Server: server,
version: raftVersion,
name: name,
url: url,
tlsConf: tlsConf,
tlsInfo: tlsInfo,
Server: server,
version: raftVersion,
name: name,
url: url,
tlsConf: tlsConf,
tlsInfo: tlsInfo,
peersStats: make(map[string]*peerStats),
}
}

View File

@ -3,11 +3,12 @@ package store
import (
"encoding/json"
"fmt"
etcdErr "github.com/coreos/etcd/error"
"path"
"strconv"
"sync"
"time"
etcdErr "github.com/coreos/etcd/error"
)
//------------------------------------------------------------------------------

View File

@ -5,10 +5,12 @@ import (
"crypto/tls"
"encoding/json"
"fmt"
"github.com/coreos/go-raft"
"io"
"net"
"net/http"
"time"
"github.com/coreos/go-raft"
)
// Transporter layer for communication between raft nodes
@ -50,12 +52,23 @@ func (t transporter) SendAppendEntriesRequest(server *raft.Server, peer *raft.Pe
u, _ := nameToRaftURL(peer.Name)
debugf("Send LogEntries to %s ", u)
thisPeerStats := r.peersStats[peer.Name]
start := time.Now()
resp, err := t.Post(fmt.Sprintf("%s/log/append", u), &b)
end := time.Now()
if err != nil {
debugf("Cannot send AppendEntriesRequest to %s: %s", u, err)
thisPeerStats.Failcnt++
} else {
thisPeerStats.Latency = float64(end.Sub(start)) / (1000000.0)
}
r.peersStats[peer.Name] = thisPeerStats
if resp != nil {
defer resp.Body.Close()
aersp = &raft.AppendEntriesResponse{}

View File

@ -3,7 +3,6 @@ package main
import (
"encoding/json"
"fmt"
"github.com/coreos/etcd/web"
"io"
"log"
"net"
@ -14,6 +13,8 @@ import (
"runtime/pprof"
"strconv"
"time"
"github.com/coreos/etcd/web"
)
//--------------------------------------