-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from fmhr/severBuild
Sever build
- Loading branch information
Showing
12 changed files
with
294 additions
and
171 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,106 @@ | ||
package main | ||
|
||
import ( | ||
"encoding/json" | ||
"io" | ||
"io/ioutil" | ||
"log" | ||
"net/http" | ||
"os" | ||
"strconv" | ||
|
||
"github.com/fmhr/fj" | ||
"github.com/pelletier/go-toml/v2" | ||
) | ||
|
||
func main() { | ||
log.Println("starting server...") | ||
port := os.Getenv("PORT") | ||
if port == "" { | ||
port = "8080" | ||
} | ||
log.Println("listening on port " + port) | ||
http.HandleFunc("/", handler) | ||
|
||
log.Fatal(http.ListenAndServe(":"+port, nil)) | ||
} | ||
|
||
func handler(w http.ResponseWriter, r *http.Request) { | ||
log.Println("handling request...") | ||
w.Write([]byte("hello")) | ||
// seed | ||
seedString := r.URL.Query().Get("seed") | ||
if seedString == "" { | ||
http.Error(w, "no seed specified", http.StatusBadRequest) | ||
return | ||
} | ||
// seed | ||
seed, err := strconv.Atoi(seedString) | ||
if err != nil { | ||
http.Error(w, "invalid seed specified", http.StatusBadRequest) | ||
return | ||
} | ||
log.Println("seed:", seed) | ||
|
||
var config fj.Config | ||
if err != nil { | ||
http.Error(w, err.Error(), http.StatusInternalServerError) | ||
return | ||
} | ||
body, err := io.ReadAll(r.Body) | ||
if err != nil { | ||
log.Println("read body error:", err) | ||
http.Error(w, err.Error(), http.StatusInternalServerError) | ||
return | ||
} | ||
err = toml.Unmarshal(body, &config) | ||
if err != nil { | ||
log.Println("toml unmarshal error:", err) | ||
http.Error(w, err.Error(), http.StatusInternalServerError) | ||
return | ||
} | ||
config.Cmd = readCmd() | ||
config.GenPath = "gen" | ||
config.VisPath = "vis" | ||
config.TesterPath = "tester" | ||
reactiveString := r.URL.Query().Get("reactive") | ||
if reactiveString == "" || reactiveString == "false" { | ||
config.Reactive = false | ||
} else { | ||
config.Reactive = true | ||
} | ||
// GEN | ||
fj.Gen(&config, seed) | ||
// RUN | ||
rtn, err := run(&config, seed) | ||
if err != nil { | ||
log.Println("run error:", err) | ||
http.Error(w, err.Error(), http.StatusInternalServerError) | ||
return | ||
} | ||
log.Println("rtn:", rtn) | ||
jsonData, err := json.Marshal(rtn) | ||
if err != nil { | ||
log.Println("json marshal error:", err) | ||
http.Error(w, err.Error(), http.StatusInternalServerError) | ||
return | ||
} | ||
w.Header().Set("Content-Type", "application/json") | ||
w.Write(jsonData) | ||
} | ||
|
||
func run(cfg *fj.Config, seed int) (map[string]float64, error) { | ||
if cfg.Reactive { | ||
log.Println("reactive mode") | ||
return fj.ReactiveRun(cfg, seed) | ||
} | ||
log.Println("normal mode") | ||
return fj.RunVis(cfg, seed) | ||
} | ||
|
||
func readCmd() string { | ||
cmd, err := ioutil.ReadFile("cmd.txt") | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
return string(cmd) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# ローカルで動かすための手順 | ||
# docker build --no-cache -t fj-server .# ローカルで動かすための手順 | ||
# docker run -p 8888:8080 --rm fj-server | ||
# docker exec -it container_name sh | ||
|
||
FROM rust:buster as rust-builder | ||
WORKDIR /work | ||
COPY /tools . | ||
# コンテストによって、以下のコメントアウトを切り替える | ||
# gen | ||
RUN cargo build --release --bin=gen | ||
RUN cp target/release/gen . | ||
RUN chmod +x /work/gen | ||
# vis リアクティブ問題のときコメントアウト | ||
RUN cargo build --release --bin=vis | ||
RUN cp target/release/vis . | ||
RUN chmod +x /work/vis | ||
# tester リアクティブな問題の時だけ使う | ||
#RUN cargo build --release --bin=tester | ||
#RUN cp target/release/tester . | ||
#RUN chmod +x /work/tester | ||
|
||
# fj/server | ||
FROM golang:latest as golang-builder | ||
RUN git clone -b severBuild https://github.com/fmhr/fj.git /go/src/github.com/fmhr/fj | ||
WORKDIR /go/src/github.com/fmhr/fj/cmd/server | ||
RUN CGO_ENABLED=0 go build -o fj-server | ||
#COPY /Users/fumihiro/Desktop/fj /go/src/github.com/fmhr/fj | ||
#WORKDIR /go/src/github.com/fmhr/fj/cmd/server | ||
#RUN CGO_ENABLED=0 go build -o fj-server | ||
|
||
# gここは提出言語によって変える | ||
FROM golang:1.20 as golang-builder2 | ||
WORKDIR /work | ||
COPY src/ . | ||
RUN go mod init main | ||
RUN CGO_ENABLED=0 go build -o main | ||
|
||
|
||
|
||
# 新しいステージを開始し、最小限のイメージをベースにする | ||
# gcloudにログインしてないと失敗する $ gcloud auth login | ||
# プロジェクトをたててGoogle Container Registry APIを有効にする | ||
#FROM gcr.io/google-cloud-builders/debian-slim | ||
|
||
FROM debian:buster | ||
WORKDIR /app | ||
# バイナリをコピー | ||
#COPY --from=rust-builder /work/tester /app/tester | ||
COPY --from=rust-builder /work/gen /app/gen | ||
COPY --from=rust-builder /work/vis /app/vis | ||
COPY --from=golang-builder /go/src/github.com/fmhr/fj/cmd/server/fj-server /app/fj-server | ||
COPY --from=golang-builder2 /work/main /app/main | ||
|
||
# ローカル環境で必要な時だけ使う | ||
#COPY ahc022-d9fa70931824.json /app/service_account_key.json | ||
#ENV GOOGLE_APPLICATION_CREDENTIALS /app/service_account_key.json | ||
|
||
|
||
RUN echo -n "./main" > cmd.txt | ||
ENV PATH /app:$PATH | ||
|
||
# ポート8080を公開 | ||
EXPOSE 8080 | ||
|
||
# バイナリを実行 | ||
CMD ["/app/fj-server"] |
Oops, something went wrong.