isucon / isucon11-portal Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
CAUTION: this project is open for only #isucon administrators /webapp /webapp/perl /webapp/ruby /webapp/nodejs /tools /tools/benchmark /tools/domchecker /tools/scoreboard ** Webアプリの基本方針 -処理はすべてリクエストを受け取ってから実施する --DBへのクエリ --テンプレートからのレンダリング -全てのコンテンツをアプリケーションから渡す --js/css/画像も含めて -キャッシュ等はとりあえず全て無し ** 実装するリクエストハンドラ - / -- GET -- articleのリスト(投稿順(id順) 最新10個) --- SELECT id,title,body,created_at FROM article ORDER BY id DESC LIMIT 10 - /article/:articleid -- GET -- articleページの表示 (article + comments) --- SELECT id,title,body,created_at FROM article WHERE id=? --- SELECT name,body,created_at FROM comment WHERE article=? ORDER BY id なお全ページ、左側のサイドバーに「新しいコメントがついた順に記事10件」を表示 --- SELECT article FROM comment GROUP BY article ORDER BY created_at DESC LIMIT 10 - /post -- GET -- 記事投稿用HTML ただしベンチ対象外のURLとする - /post -- POST -- 記事投稿 -- パラメータはform形式で title, body --- INSERT INTO article SET ... -- レスポンスは / へのリダイレクト(成功)、もしくは適当なエラー用のHTTPステータス - /comment/:articleid -- POST -- コメント投稿 (投稿フォームは /article/:articleid の末尾) -- パラメータはform形式で name, body --- INSERT INTO comment SET ... -- レスポンスは /article/:articleid へのリダイレクト(成功)、もしくは適当なエラー用のHTTPステータス ** 添付するstaticファイル - 画像 -- isuconロゴを適当なサイズにして流用、ページトップのバナー画像にする - js -- jquery 最新版の minify 済みファイル -- jquery-ui 最新版の minify 済みファイル -- isucon.js デザイン調整用 - css -- jquery-ui の適当なスタイル用のもの一式 -- isucon.css デザイン調整用
https://discord.com/developers/docs/resources/guild#search-guild-members
これで取得できるから「参加してないですよ」って表示するとよい?
User data is limited to 16384 bytes
GET /api/ssh_public_keys/:team_id/:signature
がすでにあるので runcmd で curl して書き込むようにするのが一番楽?
リーダーボードを自チームと他チームに分けるなどしてキャッシュが効くように
go.mod
go.sum
本番環境とほぼ同じ動作チェック用環境として portal-dev 環境をデプロイする
portal-dev.isucon.net
)hako app
本選作問チームが触るポータル環境を作る
xi.isucon.dev
に作るPOST /api/env_checks
に name
が qualify1
, qualify2
, qualify3
の時に、それぞれ対応する ContestantInstance にIPアドレスをセットされるようにする。
Private IP については事前に決まってるはずなのでチェッカーからは送らない。
Cloud ID も特に送ってないし、特に使うことも無いともうので適当な値を入れておく? (EC2 のインスタンス ID をチェッカーから貰っても良いかも)
(前回の定例でタスク洗い出しした際には忘れてて抜けてそうだったので Issue 作りました。一旦ポータルアプリ側の他作業も @sapphi-red さんが持ってるので Assign しておきました。)
本番環境ポータル DNS のレコードを isucon.net
に設定してもらうように依頼する (早めにやる)
こっちで作業しやすいように #12 で作成したゾーン内のサブドメインに CNAME する
TLS 証明書のために Amazon Certificate Manager を通すためのレコードも設定してもらう
早めにデプロイしてベンチマーカーとのつなぎ込みもテストできるようにする
Failedのときに0点にならないことがあります。
0点: https://portal-dev.isucon.net/admin/benchmark_jobs/130
正の点: https://portal-dev.isucon.net/admin/benchmark_jobs/132
isucon11-portal/portal/app/models/benchmark_result.rb
Lines 114 to 118 in 8267bbf
なので、恐らく
のどちらかだと思っています。
(a)や(b)は仕様ですか?
この問題自体はベンチマーク側で解決出来ると思うので、仕様ならそのままで大丈夫です。
チェッカーが AMI ID や AZ ID を知るために、そういった情報を吐いてくれるエンドポイントを実装する
認証は #100 と同じものを使う
https://scrapbox.io/ISUCON11/%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB
去年と少しは変えたいかもしれない?
チェッカーがポータルから AMI ID を受け取って、それと一致しているかチェックしている。
競技環境確認で AMI 更新した場合に、ポータルの返す AMI ID も変えるとその前にダウンロードしてた CloudFormation では AMI 不一致としてチェックに失敗するようになる。
当日 AMI 更新が入る可能性は殆ど無いだろうけども、念の為ポータルから許容できる AMI を全て返して、どれかにマッチすればチェックをパスする仕様にしたほうが安全?
isuxportal
データベースの作成isuxportal
ユーザーの作成 & 権限付与DATABASE_PASSWORD
追加ISUXPORTAL_GITHUB_CLIENT_{ID,SECRET}
追加ISUXPORTAL_DISCORD_{CLIENT_ID,CLIENT_SECRET,BOT_TOKEN}
追加#readme
にする)bot
role を付与ISUXPORTAL_SLACK_WEBHOOK_URL
追加DATABASE_URL
REDIS_URL
SENTRY_DSN
ISUXPORATAL_FINAL
ISUXPORTAL_TIMING_*
ISUXPORTAL_TERMS_URL
ISUXPORTAL_RULES_URL
ISUXPORTAL_DOCS_URL
ISUXPORTAL_DISCORD_*
(@takonomura)SECRET_KEY_BASE
ISUXPORTAL_VAPID_PRIVATE_KEY
ISUXPORTAL_ADMIN_LOGIN
ISUXPORTAL_ADMIN_PASSWORD
ISUXPORTAL_BYPASS_SECRET
ISUXPORTAL_SSH_KEY_API_SECRET
ISUXPORTAL_BENCH_TOKEN
ISUXPORTAL_DCIM_TOKEN
bundle exec rake db:migrate
isuxportal-prd-fargate
isuxportal-prd-discordbot-fargate
isuxportal-prd-worker-fargate
portal.isucon.net
設定 (@yfujit)isuxportal-prd-fargate
が完了したあとに apply する/admin/slacktown
を叩いて Slack に通知が来るしたいな〜って思った。
isucon.dev
配下の適当なサブドメイン (xi.isucon.dev
?) で Route 53 にホストゾーンを作成する (開発や内部で使う DNS 用)
CloudFormationどこ?ってなるのを防ぎたい
予選にて、ターゲットに指定されたインスタンス以外のアドレスも必要になることがわかったので
supervisor までは gRPC で渡して、 supervisor からベンチマーカープロセスには環境変数で渡す
refs #76
8月13日に行うデプロイの手順確認用
bundle exec rake db:migrate
bundle exec rails runner 'ZONE_IDS = ["apne1-az1", "apne1-az2", "apne1-az4"]; Team.active.each.with_index { |t, i| zone = ZONE_IDS[i % ZONE_IDS.size]; t.update_attributes(availability_zone: zone); puts "#{t.id} #{t.name}: #{zone}"; }'
hako deploy
github.com/isucon/isucon10-portal
になってるところを isucon11-portal に直す
Line 1 in 795dbaf
ポータルと同じ VPC 内に Prometheus と Grafana を構築する
*.xi.isucon.dev
の ACM もあるので、 grafana.xi.isucon.dev
とかで ELB 作るのが良さそうレギュレーション等では「選手」に統一しているはずなので、「競技参加者向けページ」などポータルで「参加者」などになっている箇所も選手に統一する?
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.