Laravel11のReverb技術的なことは書かないけど.

2024.06.26

Logging

おはようございます、Laravel11のReverb技術的なことは書かないけど.これを使用するとChatとかお手軽で出来ます.あとは管理画面にログインしている人に通知することなどが、VPSサーバーなどでは簡単に出来るようになる.今までと言えばSocket.ioなどを使用して何かしていたと思うけどそういう事をせずに出来てしまうところが良いですね.

実際、業務でプルリクエストしているので技術的なことは書かないですが、通知が飛ぶまで結構かかっている4日ぐらい試行錯誤して通知が飛ぶようになった.Laravel11から始めたひとはドキュメント通り行ったら上手く行くかも知れないけど、もともとLaravel6ぐらいだったものがアップグレードしてLaravel11になったものなので、色々と苦難の道でした.

最終的にジョブ、イベント、リスナー、プロバイダなどの理解も何となくから少し脱出出来た気がする.

Getting Started with Laravel Reverb

この苦難の道から脱出した方法だけ書き残しておきます.まずLaravel11のドキュメントに沿って試してみた、次にenvやconfigなどを変更してみた.上手く行かなかったので「Laravel11 Reverb」でYOUTUBEで検索してみることに、そこで少し進展がありその後envなどを再設定してみたところ通知が飛ぶようになった.結構長かった.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

chat, config, env, Laravel1, Laravel11, Laravel11 Reverb, Reverb, Socket.io, VPSサーバー, youtube, アップグレード, ジョブ, ドキュメント, ドキュメント通り, ひと, プル, プロバイダ, もともとLaravel, リスナー, 苦難,

L11が登場.

2024.03.28

Logging

おはようございます、ララベル11がリリースされました.PHP8.2から使用できるようです、いろいろとスリム化されたり機能が加わったりしているようです.下記の動画をGeminiに何を話しているのか要約してもらうようにしました.

Welcome Laravel 11

レベル11は、Laravelアプリケーションの開発をより簡単にするために設計された新機能が満載の、大幅な改善が加えられた新しいリリースです。

ビデオでは、レベル11の新機能がいくつか紹介されています。そのうちのいくつかは次のとおりです。

・アプリケーションフォルダの構造が簡素化されました。不要なファイルが削除され、より直感的に操作できるようになりました。
・新しいデフォルト設定により、新しいLaravelアプリケーションのセットアップがより簡単になりました。データベースの設定など煩わしい作業が不要になりました。
・アプリケーションの健全性を監視するための新しいヘルス機能が追加されました。これにより、アプリケーションが正常に動作していることを確認しやすくなりました。
・アプリケーションキーの変更がより簡単になりました。新しいキーのローテーション機能により、ユーザーがロックアウトされるのを防ぐことができます。
・ジョブのテストが簡素化されました。新しいアサーションメソッドを使用すると、ジョブが期待通りに動作していることを簡単に確認できます。

https://gemini.google.com/

ということらしいので、今までのLaravelとはかなり違った感じになっています.laravelshiftサービスなどを使用すれば比較的に簡単に移行できるようです.

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

gemini, Laravel, laravelshiftサービス, Laravelアプリケーション, アプリケーション, アプリケーションキー, アプリケーションフォルダ, うち, ジョブ, データベース, テスト, とおり, ビデオ, ララベル11, ローテーション機能, ロック, 新しいLaravelアプリケーション, 新しいアサーションメソッド, 構造, 煩わしい作業,

東証システム障害の考察してみた。#東証システム障害考察

2020.10.02

Logging

7時4分にアラートが上がっていた?が、現場がアラートに気が付かず、後続の処理が流れ売上の前処理バッチ処理が走った時点なのかな。そこでようやく現場がアラートが出ていることに気づく、この時点でベンダーに現場が支持を仰いだのか、マニュアル通りフェイルオーバーしたんだろう。フェイルオーバーさせたけど失敗。メモリリークがおそらく原因でサーバーの切り替えが出来なかった。ここでベンダーに支持を仰いだ可能性もありそう。そしてベンダーがここらへんから介入して監視端末のログなどを調査したら、メモリリークのエラーログを確認したんだと思う。

※失敗したジョブがどこかに格納されるだろう?。フェイルオーバーさせるより後続の処理をストップさせて、ベンダーに支持を仰いだ方が良かったのかもしれないなと。でも現場は混乱していただろう。

メモリーリークが起きていたと思うと実際は前処理バッチ処理をして失敗していたんだろう。遮断して本日の東証での取引は出来ないようにしたのは正解だと思う。

メモリリークの原因は、メモリの物理的破損だったのでメモリが悪いと判断した。メモリエラーが監視端末のログにクリティカルなエラーとして表示されていたのかは不明だけど、おそらく見落としだと思う。

7時時点で相場や売上の前処理を取り込むのなら、何だか整合性がつきそうです。おそらく手動で前処理が走るのではなく全自動で前処理が走るシステムだったんだろう。従業員が端末の監視も7時からだったのかな?

資料が時系列で書かれていないので良く分からないけど、自分なりに東証システム障害を考察してみた。

現場のヒューマンエラーも疑われるけど、末端の従業員は下請け業者何だろうな?。ベンダーは常時、東証システムの現場にいたのか?とかいろいろな事が問われるかもしれないよな。

おそらく本日から正常に東証は取引できると思います。メモリを取っ替えだろうしメモリチェックもしているだろうし。

最後に頑張れ東証システムの現場!!
末端が解雇されないことを切に願う、これで直ぐに切られたら次の職には絶対につけなくなるよ。でも末端が悪いという事ならば数年後、数ヶ月後にはクビになる可能性は高いかもな。

ちなみに上記が昨日のツイートまとめになります。

https://twitter.com/zip358com/status/1311620709412605952

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

4, 7, アラート, エラー, オーバー, ここ, ここら, こと, サーバー, システム, ジョブ, ストップ, バッチ, フェイル, べん, ベンダー, マニュアル, メモリ, メモリー, リーク, ログ, 介入, 処理, 前処理, 原因, 取引, 可能性, 失敗, 実際, 後続, 支持, , 時点, 本日, 東証, 格納, , 混乱, 現場, 監視, 確認, 端末, 考察, 調査, 遮断, 障害,

昨日の続き、cronPHP(´Д`)、一つのジョブから複数のPHPファイルを実行させる方法。

2015.06.25

Logging

<?php
//5分刻みに対して有効な無限クローン 処理が負荷の場合どうなるかは知りません。
date_default_timezone_set('Asia/Tokyo');
class cron{

    public function d_m($obj)
    {
            if($obj->m==="*")return true;
            if(preg_match("/,/",$obj->m))return $this->comma($obj->m,date("m"));
            if((int)$obj->m === (int)date("m"))return true;

            return false;
    }

    public function d_d($obj)
    {
            if($obj->d==="*")return true;
            if(preg_match("/,/",$obj->d))return $this->comma($obj->d,date("d"));
            if((int)$obj->d === (int)date("d"))return true;

            return false;
    }

    public function d_H($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->H)){
                $H = explode("/",$obj->H);
                if((int)$H[1]>0 && ((int)date("H") % (int)$H[1])===0)return true;
            }else{
                if($obj->H==="*")return true;
                if(preg_match("/,/",$obj->H))return $this->comma($obj->H,date("H"));
                if((int)$obj->H === (int)date("H"))return true;

            }
            return false;
    }

    public function d_i($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->i)){
                $i = explode("/",$obj->i);
                if((int)$i[1]>0 && ((int)date("i") % (int)$i[1])===0)return true;
            }else{
                if($obj->i==="*")return true;
                if(preg_match("/,/",$obj->i))return $this->comma($obj->i,date("i"));
                if((int)$obj->i === (int)date("i"))return true;

            }
            return false;
    }

    //曜日 0=日曜日 6=土曜日
    public function d_w($obj)
    {
            if((int)$obj->w[date("w")]===1)return true;
            return false;
    }

    public  function comma($c="",$t=""){
        if($c==="")return false;
        if($t==="")return false;
        $flg = false;
        foreach(explode(",",$c) as $cc){
            if((int)$cc===(int)$t)$flg = true;
        }
        return $flg;
    }


    public function d_command($obj){
        if($obj->command){
            exec($obj->command . " > /dev/null &");
        }
        return true;
    }

}
if ($argv[1]) {
   $filename = $argv[1];
    if(is_file($filename)){
        $jsn = json_decode(file_get_contents($filename));
        $cron = new cron();
        try {
            foreach($jsn as $obj){
                if($cron->d_m($obj)){
                    if($cron->d_d($obj)){
                        if($cron->d_H($obj)){
                            if($cron->d_i($obj)){
                                if($cron->d_w($obj)){
                                    $cron->d_command($obj);//波動拳{{{{
                                }
                            }
                        }
                    }
                }
            }
        } catch (\Throwable $th) {
            print $th->getMessage();
        }
    }
}

 
この頃、ネタがないので手抜き投稿です。気づいた人どのぐらいいるのだろうか?
Qiitaに公開しました。https://qiita.com/question909/items/8f1df9b62ab4fba76243

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

39, 5, Asia, class, comma, cron, cronphp, date, default, function, gt, if, int, lt, match, obj, php, preg, public, quot, retu, return, set, this, timezone, Tokyo, true, クローン, ジョブ, ファイル, 一つ, 処理, 分刻み, 場合, 実行, 方法, 昨日, 有効, 無限, 複数, 負荷,