Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

アクセス可能なリンクがリンク切れとして Discord へ通知されないようにしたい #3185

Closed
machida opened this issue Aug 24, 2021 · 28 comments
Assignees

Comments

@machida
Copy link
Member

machida commented Aug 24, 2021

※ 以下、 #3185 (comment) にコメントした内容をこちらへ転記しました

この Issue で対応すること

以下3つの URL がリンク切れとして判定されないように対応します。
※ それに加えて、リンク切れの通知先を「通知チャンネル」から「バグ、誤字脱字報告、機能要望🙇」に変更します。

host が www.amazon.co.jp の URL

リンク切れの判定対象外となるように対応します。

末尾が  ) の URL

URL https://ja.wikipedia.org/wiki/マジックナンバー_(プログラム) が末尾の ) が抜け落ちた状態でリンク切れの判定をされています。
正規表現で URL を取得したときに末尾の ) が抜け落ちていたようなので、URL の末尾の  ) も含めて URL としてパースできるように対応します。

ブラウザからアクセスできるのにリンク切れとして判定される URL

https://www.tablesgenerator.com/markdown_tables がリンク切れと判定されているものの、ブラウザからはアクセスできるためリンク切れと判定されないように対応します。
動作確認した結果たしかにリンク切れと判定されるため、現在その原因を調査中です。

※上記3つに該当しない URL は、動作確認した結果リンク切れと判定されなかかったため、現状は特に対応不要と判断しました。

別の Issue に切り出したこと(この Issue のスコープ外と判断したこと)

通知の見た目をより良くする

軽微な修正では済まないと判断し、#4020 に新しい Issue を立てました。調査したときに分かったことを「補足」として Issue の方に記載しました。

サイトの各ページのリンク切れに対応する

過去のリンク切れ通知を調査しているときに、まだ対応されていないリンクを見つけたので対応しやすいように別 Issue #4021 を作成しました。

@machida
Copy link
Member Author

machida commented Dec 8, 2021

@AudioStakes こちらをアサインさせていただきましたー

@komagata komagata added the 3 label Dec 8, 2021
@AudioStakes
Copy link
Contributor

AudioStakes commented Jan 18, 2022

本日のフィヨルドブートキャンプ内の質問タイムで @komagata さんと @machida さんに教えてもらったことを以下にまとめます。

この Issue で実現したいこと

過去にリンク切れとして Discord に通知されたリンクのうち、実際はリンク切れしていないリンクについて、リンク切れとして通知されないようにしたい

作業順序のイメージ

  1. 過去にリンク切れとして Discord に通知されたリンクを集める
  2. その中から、実際はリンク切れしていないリンクを抽出する
  3. それぞれのリンクがリンク切れと判定されてしまう原因を調べる
  4. それぞれの原因に対処する

リンク切れ通知の見た目について

より見やすくできる改善案があれば、今後対応できるように新たな Issue を立てておく
※ 軽微な修正で済む場合はこの Issue で対応する

(参考)現在の見た目

image

@AudioStakes
Copy link
Contributor

AudioStakes commented Jan 19, 2022

過去にリンク切れとして Discord に通知された URL のうち、実際はリンク切れしていない URL を調べてみました。
全部で36件あります。

host が www.amazon.co.jp

例: https://www.amazon.co.jp/dp/4296000187/

計24件(その他のURL省略)

host が www.amazon.co.jp 以外

http://ash.jp/net/telnet_http.htm
http://heartbeats.jp/hbblog/2012/01/nginx01.html
http://ponk.jp/jquery/basic/
http://www.vwnet.jp/mura/PortNumbers/tcpip-port.asp
http://yaoshisi.herokuapp.com/tags/SSH/
https://github.com/fgrehm/letter_opener_web
https://github.com/fjordllc/fjord-books_app
https://job.rikunabi.com/contents/company/2536/
https://lets.postgresql.jp/documents/tutorial/postgresql-abc/1-1
https://softest.jp/?p=72
https://speakerdeck.com/shibe97/ji-html5autorain
https://wiki.infra-workshop.tech/%E7%94%A8%E8%AA%9E%E9%9B%86/%E4%BF%97%E8%AA%9E/%E3%83%9E%E3%82%B5%E3%82%AB%E3%83%AA%E3%82%92%E6%8A%95%E3%81%92%E3%82%8B

計12件

@AudioStakes
Copy link
Contributor

AudioStakes commented Jan 19, 2022

ミーティングで komagata さんと machida さんに教えてもらったことのメモです。

host が www.amazon.co.jp の URL のリンク切れ判定について

現状

host が www.amazon.co.jp の URL(以下、Amazon の URL) は DENY_LIST (リンク切れの判定対象外)として設定されている

class Checker
DENY_LIST = %w[
codepen.io
www.amazon.co.jp
].freeze

しかし、動作確認してみると Amazon の URL もリンク切れの判定がされており、最終的にリンク切れの通知に含まれるようになっていた。そのため、期待する挙動(Amazon の URL のリンク切れの判定をするかどうか)が判別つかなかった。

期待する挙動とその理由

期待する挙動は、Amazon の URL をリンク切れの判定対象外とすること。
その理由は、Amazon の URL へのアクセスを何度も繰り返すと、リンク切れしていなくてもリンク切れのレスポンスが返ってくるようになり、実際にリンク切れしているかどうか判別がつかなくなるため。
※ この理由はコードへコメントとして追加する予定

@AudioStakes
Copy link
Contributor

AudioStakes commented Jan 24, 2022

@komagata @machida
過去のリンク切れ通知を調査した結果をもとに対応することを洗い出し、この Issue で対応すること/しないことを以下のように分類しました。
もし他にこの Issue で対応することがありましたらお知らせください🙏

※ 以下、Issue の Description へ記載場所を移しました

@AudioStakes AudioStakes changed the title Discordの通知チャンネルに流れるリンク切れチェッカーの通知に、URLに日本語が混ざっているとリンク切れをしていないのに、リンク切れとして通知されてしまうバグを修正 アクセス可能なリンクがリンク切れとして Discord へ通知されないようにしたい Jan 26, 2022
@AudioStakes
Copy link
Contributor

@komagata @machida
下記の対応について、お願いがあります。
お時間のある時に対応していただけますとありがたいですー🙏

このバグを修正すると同時に、通知先を「通知チャンネル」から「バグ、誤字脱字報告、機能要望🙇」チャンネルに変更をお願いします。

この対応方法について、次の記事を参考にしますと下記2点を行う必要があるようです。
https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks

  1. 「バグ、誤字脱字報告、機能要望🙇」チャンネルの Webhook URL を確認
  2. 確認した Webhook URL を GitHub のリポジトリ設定に追加

僕には権限がないようで、どちらも行えていません。
そのため、これら2点の対応をお願いできますでしょうか?

※ アプリのコードでの対応方法については、別途 PR のレビューの際に相談させてもらおうと考えています。

@komagata
Copy link
Member

@AudioStakes Webhook URLは他の処理でも環境変数から取ってくるような実装になっていると思うのでそちらでお願いします。
開発環境やステージング環境では自分のサーバーのチャンネルなどでテストできてればOKです。本番環境での環境変数の設定や動作確認は僕がやります〜。

@AudioStakes
Copy link
Contributor

@komagata
なるほど、理解しました!
ひとまず自分の Discord サーバーを立ててみて、そちらで動作確認してみようと思いますー
※ GitHub のリポジトリには特に設定しなくてもよいということに気づきました。

本番環境での環境変数の設定や動作確認は僕がやります〜。

ありがとうございます、よろしくお願いいたします🙏

@komagata
Copy link
Member

@AudioStakes Discordでは最初から自分用サーバーができているのでそちらのチャンネルでテストするとやりやすいと思います〜

@AudioStakes
Copy link
Contributor

@komagata
なるほど、ありがとうございます!

Discordでは最初から自分用サーバーができている

Discord で自分用サーバーを探してみたところ、見当たリませんでした。自分用サーバーの作り方を調べてみると手軽にできそうだったので、新たに自分用サーバーを立てて対応しました!
今のところ、問題なく動作確認できていますー

@AudioStakes
Copy link
Contributor

AudioStakes commented Feb 10, 2022

@komagata
ステージング環境と本番環境での動作確認方法について、質問とお願いがあります。

ステージング環境

(質問) 環境変数 TOKEN の値

環境変数 TOKEN の値は、 /scheduler/link_checker へのアクセスの認証に使われています。
動作確認に必要なため、この値を教えてもらえますでしょうか?もしくは、僕に教えるのは避けた方がよさそうでしたら、/scheduler/link_checker へのアクセスを komagata さんにお願いできますでしょうか?

以下、「やったこと」と「調べたこと」を説明します。

やったこと: ステージング環境へのログイン後に https://bootcamp-staging.fjord.jp/scheduler/link_checker にアクセスすると、次のとおり 401 が返されました。

image

調べたこと: この原因を調べてみますと、次の箇所でリクエストのパラメータの token の値を検証しているようでした。

before_action :require_token
protected
def require_token
return if ENV['TOKEN'] == params[:token]

(お願い)環境変数 DISCORD_BUG_WEBHOOK_URL への値の設定

Discord への通知内容を確認するため、環境変数 DISCORD_BUG_WEBHOOK_URL に次の Webhook URL (僕個人用の Discord チャンネル)の設定をお願いいたします🙏

https://discord.com/api/webhooks/936560140579110933/g4V3in8ctIOcQm8lehB7__LKFZhaPJLbjrGMcobkMXFf58avuu84U8WGONpqMrxgwwKq

本番環境(まだリリースはされていません)

以下の設定・操作については僕に実行権限がなさそうなため、komagata さんにお願いできますでしょうか?

  1. 環境変数 DISCORD_BUG_WEBHOOK_URL に Discord の 「バグ、誤字脱字報告、機能要望🙇」チャンネルの Webhook URL を設定
  2. 本番環境の環境変数 TOKEN の値をパラメーターとして送るようにして /scheduler/link_checker へアクセス

※ Discord に通知された内容の確認は、僕が行います。

@komagata
Copy link
Member

@AudioStakes

TOKEN

ステージングのTOKENをtestに設定しました。

(お願い)環境変数 DISCORD_BUG_WEBHOOK_URL への値の設定

設定しました。

以下の設定・操作については僕に実行権限がなさそうなため、komagata さんにお願いできますでしょうか?

かしこまりました。

@AudioStakes
Copy link
Contributor

@komagata
設定ありがとうございます〜!
ステージング環境で動作確認し、期待どおり動くことを確認しました。

お手数お掛けしますが、リリース後に本番環境の設定をよろしくお願いいたします🙏

@AudioStakes
Copy link
Contributor

@komagata
こちらリリースされましたので、お時間のあるときに、本番環境にてリンク切れ通知の実行をよろしくお願いいたしますー🙏

@komagata
Copy link
Member

@AudioStakes 設定しました〜

@AudioStakes
Copy link
Contributor

@komagata 設定ありがとうございます〜!

試しに本番環境で次の URL にアクセスした結果、 401 が返されます。
https://bootcamp.fjord.jp/scheduler/link_checker?token=test

本番環境の環境変数 TOKEN の値を教えていただくか、もしくは komagata さんにリンク切れ通知の実行( /scheduler/link_checker へのアクセス)をお願いできますでしょうか🙏

@komagata
Copy link
Member

@AudioStakes DiscordのDMでTOKENの値をお伝えしたいと思います〜

@AudioStakes
Copy link
Contributor

AudioStakes commented Feb 28, 2022

@komagata
ご連絡、ありがとうございます!
教えていただいた TOKEN を設定して本番環境にアクセスした結果、Discord へリンク切れは通知されませんでした。
本番環境で期待どおりに通知されない原因を調べる方法がよくわかっておらず、何かご存知のことがありましたら教えてもらいたいです🙇‍♂️

以下、参考までにわかっていること・考えたことを載せます。

ブラウザの画面には upstream connect error or disconnect/reset before headers. reset reason: connection termination というメッセージが表示されています。
Chrome のデベロッパーツールの Network には以下が表示されています。

Headers タブ

image

Timing タブ

image

Timing タブで Waiting(TTFB) が 1.1 min と表示されていることから、もしかしたらタイムアウトになったかもしれないと考えています。
もし bootcamp の本番環境のサーバーでタイムアウトの時間が1分と定められているならタイムアウトの可能性が高そうですが、どうでしょう?

@komagata
Copy link
Member

komagata commented Mar 3, 2022

@AudioStakes 今日(3月3日)のリリースで本番環境でのタイムアウトの時間を大幅に伸ばしてみました〜

@AudioStakes
Copy link
Contributor

AudioStakes commented Mar 4, 2022

@komagata
ご対応、ありがとうございます〜!
試してみました結果、リンク切れの通知は届いておらず、次のとおり約37秒で前回と同じエラーメッセージが表示されていました。

image

原因はタイムアウトの時間設定ではなかったのかもしれません。

原因を調査するためにログを確認してみたいと考えているものの、僕には本番環境へのアクセス権限がないのかなと考えています。
そのためもし可能でしたら、komagata さんにログを見つけてもらうことをお願いできますでしょうか?🙇‍♂️

なお、現時点のステージング環境ではエラーなく Discord へリンク切れ通知できることを確認済みです。

@komagata
Copy link
Member

komagata commented Mar 9, 2022

@AudioStakes ご連絡ありがとうございます。(ちょっと考えていて返信遅くなりすみません。)
ちょっと原因わからないので調べてみたいと思います。

@AudioStakes
Copy link
Contributor

@komagata
お手数おかけして申し訳ないです🙇‍♂️
何かできることがありましたら、お知らせください🙏

@github-actions
Copy link

このissue|PRは60日間更新がないため7日後にcloseします。closeしたくない場合はstaleラベルを外してください。

@github-actions github-actions bot added the stale label May 12, 2022
@komagata komagata removed the stale label May 18, 2022
@github-actions
Copy link

このissue|PRは60日間更新がないため7日後にcloseします。closeしたくない場合はstaleラベルを外してください。

@github-actions github-actions bot added the stale label Jul 18, 2022
@komagata komagata removed the stale label Jul 21, 2022
@github-actions
Copy link

このissue|PRは60日間更新がないため7日後にcloseします。closeしたくない場合はstaleラベルを外してください。

@github-actions github-actions bot added the stale label Sep 20, 2022
@komagata komagata removed the stale label Sep 21, 2022
@github-actions
Copy link

このissue|PRは60日間更新がないため7日後にcloseします。closeしたくない場合はstaleラベルを外してください。

@github-actions github-actions bot added the stale label Nov 21, 2022
@komagata komagata removed the stale label Nov 21, 2022
@github-actions
Copy link

このissue|PRは60日間更新がないため7日後にcloseします。closeしたくない場合はstaleラベルを外してください。

@github-actions github-actions bot added the stale label Jan 21, 2023
@github-actions
Copy link

このissue|PRはstaleラベルを付けた後7日間更新がないためcloseしました。

@komagata komagata moved this to 完成 in bootcamp Aug 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

No branches or pull requests

3 participants