etcd-io / etcd-play Goto Github PK
View Code? Open in Web Editor NEWetcd playground
Home Page: http://play.etcd.io
License: Apache License 2.0
etcd playground
Home Page: http://play.etcd.io
License: Apache License 2.0
Right now etcd agent is standalone which was part of the original design of the etcd functional tests. Now that we have kubernetes we should make a driver that talks to kubernetes instead.
2016-03-03 00:27:36.519135 W | etcdserver: 80% of the file descriptor limit is used [used = 1009, limit = 1024]
2016-03-03 00:27:41.519137 W | etcdserver: 80% of the file descriptor limit is used [used = 1014, limit = 1024]
2016-03-03 00:27:46.519567 W | etcdserver: 80% of the file descriptor limit is used [used = 1019, limit = 1024]
2016-03-03 00:27:51.519277 W | etcdserver: 80% of the file descriptor limit is used [used = 1024, limit = 1024
I still see some delay loading the initial node status when there
are multiple users online. It should be from global lock contentions.
Possibly use external cache libraries.
Or profile it and optimize Go code.
Do not allow clients to pass too large texts.
Let users try out watch feature. Then it needs to support long running
client requests without timeout. Needs some kind of progress bar or something.
Related to #33.
Status of cluster is shared globally, which is protected by global lock.
This is not a good practice when there are many concurrent users.
When it had more than 20 users, I could see play.etcd.io run slower.
We need to make each client(website user) subscribe to status update channel.
And at the top level, copy the status value and send those copies to client channels,
so that we only need to lock when it updates the globally defined status.
Clients just receives the copied values from the channel.
fix build script to not use go get
because etcd recently changed the way it vendors dependencies
The client needs to get status of the cluster periodically (every second). And it got this error:
2016/03/02 17:49:00 Failed to dial 10.240.0.9:1278: grpc: the client connection is closing; please retry.
2016/03/02 17:49:01 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:01 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:02 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:02 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:03 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:04 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:05 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:05 Failed to dial 10.240.0.10:1278: grpc: timed out trying to connect; please retry.
2016/03/02 17:49:08 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:08 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:10 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:10 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:12 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.9:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.9:1278"
2016/03/02 17:49:12 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
2016/03/02 17:49:13 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 10.240.0.10:1278: connect: cannot assign requested address"; Reconnecting to "10.240.0.10:1278"
Need to re-enable travis CI.
glide has some issues with go test files Masterminds/glide#320.
Someone can try to inject Javascript snippet through 'user input' (like alert("1")
).
We need a way to prevent this by sanitizing user inputs, or use text/template
package
to escape data.
Currently it keeps track of active users by the size of user cache map.
But it's not clearly defined when a user is considered not-active.
It just manually cleans up such users in for-loop with 5 minute interval.
Make this happen atomically, so that we can reduce the contention
around global user cache.
When I attempt a HEAD request on the playground, I get a 404:
$ curl -v --head http://play.etcd.io/ ~/code/crawford/marker
* Trying 104.199.121.254...
* TCP_NODELAY set
* Connected to play.etcd.io (104.199.121.254) port 80 (#0)
> HEAD / HTTP/1.1
> Host: play.etcd.io
> User-Agent: curl/7.53.1
> Accept: */*
>
< HTTP/1.1 404 Not Found
HTTP/1.1 404 Not Found
< Server: nginx/1.10.1 (Ubuntu)
Server: nginx/1.10.1 (Ubuntu)
< Date: Tue, 15 Aug 2017 17:33:34 GMT
Date: Tue, 15 Aug 2017 17:33:34 GMT
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< Content-Length: 140
Content-Length: 140
< Connection: keep-alive
Connection: keep-alive
< X-Powered-By: Express
X-Powered-By: Express
< Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
< Content-Security-Policy: default-src 'self'
Content-Security-Policy: default-src 'self'
< X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
< Vary: Accept-Encoding
Vary: Accept-Encoding
<
* Connection #0 to host play.etcd.io left intact
When I do a GET, I get a 200. The HEAD request should also return a 200.
Currently every single ajax call hits etcd api endpoints, to get hashes and metrics. This is not efficient.
When there are multiple active users at the same time, this can overload etcd cluster with duplicate
requests for the same timestamp. There should be one status polling handler to keep the status data
up-to-data and serve it to all ajax calls on the fly.
Need more advanced control over etcd-agents, like rate limiting.
Currently I am maintaining two versions frontend code.
Just combine these two.
Currently user IP + user agent generate an unique identifier to receive status updates to the browser. So if one person has multiple tabs or windows of play.etcd.io with the same browser, only one browser gets the update.
Fix this by giving unique ID for each tab/windows.
Stop request successfully received, but the syscall to terminate etcd doesn't work well...
Try syscall.SIGKILL
?
Several scenarios that users can simulate failures in etcd.
Provide some gifs or YouTube clips.
Currently etcd-play web
launches etcd
in localhost,
and shows all the etcd logs to browser. Make this configurable
so that people can discard logs if they want.
To be replaced by etcd-io/etcd#5279.
AngularJS 2
Current one machine handles all client requests from the web interface.
There needs to some kind of rate limiting and scheduling if there are too
many concurrent ones. This needs better status reporting of client requests
(web UI).
I see spikes in traffic, and play.etcd.io blocks for page loading... Need to make it unblocking.
Current rate limiter is too naive or not clear about what it does.
Do this better.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.