Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 4c0b567

Browse files
committed
moved go files back to root
Signed-off-by: Adrien Duermael <adrien@duermael.com>
1 parent 931058e commit 4c0b567

File tree

5,577 files changed

+48
-41
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

5,577 files changed

+48
-41
lines changed

Dockerfile

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ RUN curl -sSL -o docker.tgz https://get.docker.com/builds/Linux/x86_64/docker-${
99
ln -s /bin/docker /bin/docker-${DOCKER_VERSION}
1010

1111
# Copy Go code and install applications
12-
COPY ./go /go/src/dockercraft
13-
WORKDIR /go/src/dockercraft
12+
WORKDIR /go/src/github.com/docker/dockercraft
13+
COPY . .
1414
RUN go install
1515

1616
# Download Cuberite server (Minecraft C++ server)
@@ -21,6 +21,9 @@ RUN ln -s /srv/cuberite_server/Cuberite /usr/bin/cuberite
2121
COPY ./world world
2222
COPY ./docs/img/logo64x64.png logo.png
2323

24+
EXPOSE 25565
25+
2426
COPY ./start.sh start.sh
27+
2528
CMD ["/bin/sh", "/srv/start.sh"]
26-
EXPOSE 25565
29+

go/proxy.go renamed to daemon.go

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,18 @@ import (
1616
"github.com/fsouza/go-dockerclient"
1717
)
1818

19+
// TCPMessage defines what a message that can be
20+
// sent or received to/from LUA scripts
1921
type TCPMessage struct {
2022
Cmd string `json:"cmd,omitempty"`
2123
Args []string `json:"args,omitempty"`
2224
// Id is used to associate requests & responses
23-
Id int `json:"id,omitempty"`
25+
ID int `json:"id,omitempty"`
2426
Data interface{} `json:"data,omitempty"`
2527
}
2628

29+
// StatsOptionsEntry is used to collect stats from
30+
//mthe Docker daemon
2731
type StatsOptionsEntry struct {
2832
statsOptions docker.StatsOptions
2933
// statsOptions can only store the one-way channel
@@ -38,26 +42,15 @@ type StatsOptionsEntry struct {
3842
// It describes a Docker container event. (start, stop, destroy...)
3943
type ContainerEvent struct {
4044
Action string `json:"action,omitempty"`
41-
Id string `json:"id,omitempty"`
45+
ID string `json:"id,omitempty"`
4246
Name string `json:"name,omitempty"`
4347
ImageRepo string `json:"imageRepo,omitempty"`
4448
ImageTag string `json:"imageTag,omitempty"`
45-
Cpu string `json:"cpu,omitempty"`
46-
Ram string `json:"ram,omitempty"`
49+
CPU string `json:"cpu,omitempty"`
50+
RAM string `json:"ram,omitempty"`
4751
Running bool `json:"running,omitempty"`
4852
}
4953

50-
// goproxy main purpose is to be a daemon connecting the docker daemon
51-
// (remote API) and the custom Minecraft server (cubrite using lua scripts).
52-
// But the cuberite lua scripts also execute goproxy as a short lived process
53-
// to send requests to the goproxy daemon. If the program is executed without
54-
// additional arguments it is the daemon "mode".
55-
//
56-
// As a daemon, goproxy listens for events from the docker daemon and send
57-
// them to the cuberite server. It also listen for requests from the
58-
// cuberite server, convert them into docker daemon remote API calls and send
59-
// them to the docker daemon.
60-
6154
// Daemon maintains state when the dockercraft daemon is running
6255
type Daemon struct {
6356
// Client is an instance of the DockerClient
@@ -120,6 +113,8 @@ func (d *Daemon) Init() error {
120113
return nil
121114
}
122115

116+
// Serve exposes a TCP server on port 25566 to handle
117+
// connections from the LUA scripts
123118
func (d *Daemon) Serve() {
124119

125120
tcpAddr, err := net.ResolveTCPAddr("tcp", ":25566")
@@ -139,6 +134,9 @@ func (d *Daemon) Serve() {
139134
}
140135
}
141136

137+
// StartMonitoringEvents listens for events from the
138+
// Docker daemon and uses callback to transmit them
139+
// to LUA scripts.
142140
func (d *Daemon) StartMonitoringEvents() {
143141
go func() {
144142
err := d.Client.AddEventListener(d.containerEvents)
@@ -257,7 +255,7 @@ func (d *Daemon) eventCallback(event *docker.APIEvents) {
257255

258256
containerEvent.Action = "createContainer"
259257

260-
data, err := containerEventToTcpMsg(containerEvent)
258+
data, err := containerEventToTCPMsg(containerEvent)
261259
if err != nil {
262260
log.Println(err)
263261
return
@@ -269,15 +267,15 @@ func (d *Daemon) eventCallback(event *docker.APIEvents) {
269267

270268
containerEvent.Action = "startContainer"
271269

272-
data, err := containerEventToTcpMsg(containerEvent)
270+
data, err := containerEventToTCPMsg(containerEvent)
273271
if err != nil {
274272
log.Println(err)
275273
return
276274
}
277275

278276
d.tcpMessages <- append(data, '\n')
279277

280-
d.startStatsMonitoring(containerEvent.Id)
278+
d.startStatsMonitoring(containerEvent.ID)
281279

282280
case "stop":
283281
// die event is enough
@@ -295,7 +293,7 @@ func (d *Daemon) eventCallback(event *docker.APIEvents) {
295293

296294
containerEvent.Action = "stopContainer"
297295

298-
data, err := containerEventToTcpMsg(containerEvent)
296+
data, err := containerEventToTCPMsg(containerEvent)
299297
if err != nil {
300298
log.Println(err)
301299
return
@@ -304,21 +302,21 @@ func (d *Daemon) eventCallback(event *docker.APIEvents) {
304302
d.tcpMessages <- append(data, '\n')
305303

306304
d.Lock()
307-
statsOptionsEntry, found := d.statsOptionsStore[containerEvent.Id]
305+
statsOptionsEntry, found := d.statsOptionsStore[containerEvent.ID]
308306
if found {
309307
close(statsOptionsEntry.doneChan)
310-
delete(d.statsOptionsStore, containerEvent.Id)
308+
delete(d.statsOptionsStore, containerEvent.ID)
311309
}
312310
d.Unlock()
313311

314312
// enforce 0% display (Cpu & Ram)
315-
d.statCallback(containerEvent.Id, nil)
313+
d.statCallback(containerEvent.ID, nil)
316314

317315
case "destroy":
318316

319317
containerEvent.Action = "destroyContainer"
320318

321-
data, err := containerEventToTcpMsg(containerEvent)
319+
data, err := containerEventToTCPMsg(containerEvent)
322320
if err != nil {
323321
log.Println(err)
324322
return
@@ -331,32 +329,32 @@ func (d *Daemon) eventCallback(event *docker.APIEvents) {
331329
// the cuberite server
332330
func (d *Daemon) statCallback(id string, stats *docker.Stats, args ...interface{}) {
333331
containerEvent := ContainerEvent{}
334-
containerEvent.Id = id
332+
containerEvent.ID = id
335333
containerEvent.Action = "stats"
336334

337335
if stats != nil {
338336
memPercent := float64(stats.MemoryStats.Usage) / float64(stats.MemoryStats.Limit) * 100.0
339-
var cpuPercent float64 = 0.0
337+
var cpuPercent float64
340338
if preCPUStats, exists := d.previousCPUStats[id]; exists {
341339
cpuPercent = calculateCPUPercent(preCPUStats, &stats.CPUStats)
342340
}
343341

344342
d.previousCPUStats[id] = &CPUStats{TotalUsage: stats.CPUStats.CPUUsage.TotalUsage, SystemUsage: stats.CPUStats.SystemCPUUsage}
345343

346-
containerEvent.Cpu = strconv.FormatFloat(cpuPercent, 'f', 2, 64) + "%"
347-
containerEvent.Ram = strconv.FormatFloat(memPercent, 'f', 2, 64) + "%"
344+
containerEvent.CPU = strconv.FormatFloat(cpuPercent, 'f', 2, 64) + "%"
345+
containerEvent.RAM = strconv.FormatFloat(memPercent, 'f', 2, 64) + "%"
348346
} else {
349347
// if stats == nil set Cpu and Ram to 0%
350348
// it's a way to enforce these values
351349
// when stopping a container
352-
containerEvent.Cpu = "0.00%"
353-
containerEvent.Ram = "0.00%"
350+
containerEvent.CPU = "0.00%"
351+
containerEvent.RAM = "0.00%"
354352
}
355353

356354
tcpMsg := TCPMessage{}
357355
tcpMsg.Cmd = "event"
358356
tcpMsg.Args = []string{"containers"}
359-
tcpMsg.Id = 0
357+
tcpMsg.ID = 0
360358
tcpMsg.Data = &containerEvent
361359

362360
data, err := json.Marshal(&tcpMsg)
@@ -413,7 +411,7 @@ func (d *Daemon) listContainers() {
413411
}
414412

415413
containerEvent := ContainerEvent{}
416-
containerEvent.Id = id
414+
containerEvent.ID = id
417415
containerEvent.Action = "containerInfos"
418416
containerEvent.ImageRepo = imageRepo
419417
containerEvent.ImageTag = imageTag
@@ -422,7 +420,7 @@ func (d *Daemon) listContainers() {
422420
parts := strings.SplitN(container.Status, " ", 2)
423421
containerEvent.Running = len(parts) > 0 && parts[0] == "Up"
424422

425-
data, err := containerEventToTcpMsg(containerEvent)
423+
data, err := containerEventToTCPMsg(containerEvent)
426424
if err != nil {
427425
log.Println(err)
428426
return
@@ -432,10 +430,10 @@ func (d *Daemon) listContainers() {
432430

433431
if containerEvent.Running {
434432
// Monitor stats
435-
d.startStatsMonitoring(containerEvent.Id)
433+
d.startStatsMonitoring(containerEvent.ID)
436434
} else {
437435
// enforce 0% display (Cpu & Ram)
438-
d.statCallback(containerEvent.Id, nil)
436+
d.statCallback(containerEvent.ID, nil)
439437
}
440438
}
441439
}()
@@ -529,23 +527,23 @@ func splitRepoAndTag(repoTag string) (string, string) {
529527
return repo, tag
530528
}
531529

532-
func containerEventToTcpMsg(containerEvent ContainerEvent) ([]byte, error) {
530+
func containerEventToTCPMsg(containerEvent ContainerEvent) ([]byte, error) {
533531
tcpMsg := TCPMessage{}
534532
tcpMsg.Cmd = "event"
535533
tcpMsg.Args = []string{"containers"}
536-
tcpMsg.Id = 0
534+
tcpMsg.ID = 0
537535
tcpMsg.Data = &containerEvent
538536
data, err := json.Marshal(&tcpMsg)
539537
if err != nil {
540-
return nil, errors.New("containerEventToTcpMsg error: " + err.Error())
538+
return nil, errors.New("containerEventToTCPMsg error: " + err.Error())
541539
}
542540
return data, nil
543541
}
544542

545543
func (d *Daemon) apiEventToContainerEvent(event *docker.APIEvents) (ContainerEvent, error) {
546544

547545
containerEvent := ContainerEvent{}
548-
containerEvent.Id = event.ID
546+
containerEvent.ID = event.ID
549547

550548
// don't try to inspect container in that case, it's already gone!
551549
if event.Action == "destroy" {

dockercraft

6.36 MB
Binary file not shown.

go/main.go renamed to main.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ import (
66
"os"
77
)
88

9+
// The main purpose of this application is to connect the docker daemon
10+
// (remote API) and the custom Minecraft server (cubrite using lua scripts).
11+
// Docker daemons events are transmitted to the LUA script as JSON messages
12+
// over TCP transport. The cuberite LUA scripts can also contact this
13+
// application over the same TCP connection.
14+
915
var debugFlag = flag.Bool("debug", false, "enable debug logging")
1016

1117
func main() {
File renamed without changes.

0 commit comments

Comments
 (0)