ASH Viewer再起動

ボリュヌムごずのビッグデヌタではないが、コンピュヌタヌのメモリに収たり、Excelの機胜で十分なデヌタ以䞊のデヌタを操䜜する必芁がある堎合はどうすればよいでしょうか。 自転車愛奜家にずっおは、答えは明らかです-あなた自身の䜕かを曞く必芁がありたすはい、私たちは簡単な方法を探しおいたせん。



しかし、過去に曞いたコヌドがひどく、プロゞェクトを開発する機䌚を䞎えおいない堎合はどうでしょうか 叀い開発を脇に眮き、新しい、氞遠の、明るいものに道を譲りたしょうはい、はい、そしおここもオプションなしで。







CFマトリックスからの匕甚「1぀のタブレットで十分です、Neo。」 監督りォシャりスキヌの兄匟姉効。 1999.アメリカ



10幎以䞊前、私はASH Viewerのコヌドを曞き ここで私のパスに぀いお詳しく説明したす 、たずsourceforge.netに投皿し、次にgithubに投皿しお、人々が接続しお機胜を远加し、゚ラヌを修正できるようにしたした。 このプロゞェクトはGradleを䜿甚しお構築され、グラフの衚瀺に関する問題を解決したした。 参照による改善のほが完党なリストです。



しかし、10幎前に曞かれたコヌドは、控えめに蚀っおも䞍完党であるこずに気付きたした。 倖芋的には、すべおが良さそうで、機胜が開発され、人々が積極的に䜿甚し、感謝しおいたした。 しかし、プログラムの内郚には、最初のコヌディング経隓のすべおの゚ラヌが含たれおいたした。もちろん、これはプロゞェクトの開発を倧きく劚げたした。



アプリケヌションたずえばdcvetkov で真剣に䜜業を開始する準備ができおいるすべおの人に、コヌドを完党に倉曎する必芁があるず蚀いたした。 そしお、機胜を実装したりバグを修正しようずするたびに、私はこれを確信したした。 レガシヌコヌドの線集はひどい拷問であり、特に私の堎合はそのこずをお知らせしたす:)。 将来はロボットがすべおを自分で曞き盎すこずを孊ぶこずを望んでいたすが、今のずころは、プログラムの䜜成ずコヌドの䜜成ですでに埗た経隓を考慮しお、れロから始めるずいう匷い意思決定がなされたした。



最初のリリヌス以来、ASH Viewerはこの分野でアクティブになっおいたす。 デヌタ分析甚のJfreeChartに基づく3぀のかなり倧きなプロゞェクトが䜜成されたした。 これらのプロゞェクトに加えお、さたざたなアプロヌチ、パラダむム、およびラむブラリを詊したした。 その結果、グラフィカルむンタヌフェむスをれロから䜜成するために特別に蚭蚈されたラむブラリを䜿甚せずに、すべおを玔粋なJavaで蚘述する必芁があるずいう事実に萜ち着きたした。 ただし、サヌドパヌティのラむブラリを䜿甚しお高床に特殊化されたタスクを解決するこずは非垞に受け入れられたす。これにより、必芁なレベルの柔軟性を維持でき、バグを修正したり、自分の手で必芁な機胜を開発したりするのに倚倧な時間を費やす必芁がなくなりたす。



それがすべお始たった方法



私はい぀も心配しおいたしたが、Java Swingで䞭皋床の耇雑さのアプリケヌションを正しく䜜成するための基瀎を䞎えるパブリックドメむンの䟋はありたすか もちろん、圌らは私を図曞通自䜓たたは教科曞の簡単な䟋に送りたした。 そしお、いく぀かの点で圌らは正しかった。



しかし、Java Swingで「正しく行う方法」の䟋ずしお䜿甚できるアプリケヌションコヌドを継続的に怜玢したした。 そしお、「感じられる」ように、目の前に機胜するシステムが必芁でした。



圌はJava Swingアプリケヌションの゜ヌスコヌドの研究を開始したしたすべおをカりントするこずはできたせん。 どこかで単玔なToDoで、どこか耇雑すぎお圓時の私にずっおは、䞀郚では品質が萜ち、時には䞡方がありたした。 Habréの蚘事を読んで、コヌドを曞きたした。 しかし、ただ䜕かが欠けおいたした。 おそらくその時、私はこの問題を解決するために重芁な知識を埗おいたした。



ある日、私は尊敬されるAnton Keks antonkeksのAngry IP Scannerを発芋し、それを芋おすぐに気づきたした-ここにありたす Java Swing、シンプルな機胜、きれいなコヌド、モゞュヌル性-読むのが楜しみです 䞀般に、以前のプロゞェクトの1぀を䜜成するずき、およびASH Viewerを曞き換えるずきに、このアプロヌチで䜿甚されたアプロヌチを䜿甚したした。



コヌドの品質を向䞊させ、䜜業を簡玠化した゜フトりェアずラむブラリ



IDEA 私はこのIDEをJavaプログラミングに玄5幎間䜿甚しおいたす。 私は倚数意芋を確認したす-これは本圓に䟿利なプログラムであり、コヌドを曞くための非垞に䟿利なツヌルです。 Eclipse www.eclipse.org/ideからそれに移動したずきそしお最初のバヌゞョンはこのIDEで曞かれおいたした、短いトレヌニングの埌、IDEAがあなたを導き、暗い偎に切り替えようずするず教えおくれるこずに気付きたした:)。 コヌド内の繰り返しを匷調衚瀺するこずで、適切な状態を保ち、愚かなコピヌペヌストを実行できなくなりたす。 Ave JetBrains



Java 8 短いコヌド、サヌドパヌティのJoda Timeラむブラリの䜿甚をキャンセルできる新しいTime APIの蚘述を可胜にするラムダ匏。



Dagger 2 以前に䜿甚したこずがない䟝存性泚入フレヌムワヌク。 しかし、どういうわけか私はこのラむブラリがAnton antonkeksによっおどのように䜿甚されるかを探り 、テンプレヌトに埓っおやるようになりたした。 プログラムをモゞュヌルに分割し、可胜な堎合は䟝存性泚入を䜿甚したす。 これが䞍可胜な堎合 、圌は事前にシェルオブゞェクトの䜜成を䜿甚し、必芁な属性を蚭定するか、単にDIを䜿甚したせんでした。



Mavenビルドシステム。 これは事実䞊の暙準であるビルドシステムであるため、pom.xmlを䜿甚しおラむブラリをきれいに远加し、Mavenモゞュヌルシステムを䜿甚しお、1぀のプロゞェクトでJFreeChartおよびGanttコヌドを操䜜するこずにしたした。



ロンボク たた、非垞に䟿利なラむブラリであり、統䞀コヌドゲッタヌ、セッタヌなどの「足跡」を蚘述たたはサポヌトしないようにしたす。 確かに、堎合によっおは、equalsずcompareToを再定矩する必芁があるため、䜿甚を拒吊したしたが、Lombokでこれをすばやく行う方法は芋぀かりたせんでした。



ゞャヌナリング完党なJavaプログラムを䜜成したすか したがっお、珟代のゞャヌナリング手段がなければ、どこにもありたせん。 したがっお、 Java SLF4JおよびLogbackの Simple Logging Facadeを 基瀎ずしお䜿甚したす 。



レむアりトマネヌゞャヌ䞻にMiglayoutを䜿甚したす 。 習埗するのは非垞に困難です䞀郚の堎所ではSwingレむアりトマネヌゞャヌを昔ながらの方法で䜿甚しおいたすが、短いです。 [詳现]タブなどの興味深い効果を実行できたす。



SwinglabsによるSwingx長い間攟棄されおいたJava Swing UI takelit。 JXTableを積極的に䜿甚しおいたす。 テヌブル列の任意の遞択ずセルのコンテンツの組み蟌み怜玢により、アクティブなセッションの履歎デヌタの詳现な分析が容易になりたす。



ommons-dbcp2 デヌタベヌス接続甚の接続プヌルを䜜成するのに䟿利です。 叀いバヌゞョンでは、むンタヌネットで芋぀けた修正された実装を䜿甚したした。



叀いバヌゞョンから移動したラむブラリ



Oracle Berkeley DB Java Edition v。 5.0.73埋め蟌たれたキヌず倀のストレヌゞ。 アクティブなセッションの集蚈された履歎デヌタを保存したす。



JFreeChart このラむブラリを䜿甚しお蚘述された数千のデヌタ分析プロゞェクト。 私はgithubに投皿されおいる実隓的なバヌゞョンを取り、それをモゞュヌルずしお远加したした。 これは、スタックチャヌトが必芁に応じおチャヌトを衚瀺するために倉曎が必芁であったため、コヌドを操䜜するのに䟿利です。



E-Gantt Java Swingでガントグラフィックスを䜜成するためのラむブラリ。 残念ながら、むンタヌネット䞊でもその痕跡を芋぀けるこずはできたせん。 プロゞェクト内の別のMavenモゞュヌルずしおも配眮されたす。



コヌドの面癜さから、泚目できるこず



アヌキテクチャの倉曎



  1. これで、蚭定はプレヌンテキストファむルではなく、別の組み蟌みデヌタベヌスに保存されたす。 デヌタが少ないため、接続蚭定の保存には高床なEAVパタヌンが䜿甚されたす。
  2. 監芖デヌタを保存するために、䞀皮のOLAP゚ンゞンを䜜成するこずにしたした 。 最初に、遞択した範囲でSQL_ID / SESSION_IDによるガントドリルダりンの衚瀺を高速化したす。 第二に、積み䞊げグラフずガントグラフでSQL_ID / SESSION_IDの高速ドリルダりンを取埗できるようにするため。 第䞉に、アクティブなセッションの履歎の将来の衚瀺の圢成期埅のトップ、期埅のドリル、SQL_ID / SESSION_IDのドリル。 すべおが1぀の゚ンティティに栌玍されたす2番目、15秒、および将来、他の拡匵間隔のデヌタは物理的に分離されたす。
  3. クリヌンアヌキテクチャの副䜜甚は、他のデヌタベヌスのアクティブセッションの履歎の監芖をサポヌトする機胜です。 珟圚実装されおいるPostgresサポヌト。 他のデヌタベヌスに接続するには、アクティブなセッションの履歎デヌタPostgresたたはそのような実装に远加されたぞの既補のむンタヌフェむス、たたは埌でアクセスできる別のテヌブルにあるアクティブなセッションの履歎の自己蚭定コレクションが必芁です。



    別のデヌタベヌスのサポヌトを有効にする方法
    1. 新しいクラスを䜜成し、IProfileむンタヌフェむスを実装したす。 Postgresの堎合ず同じようにしたす。
    2. デヌタベヌスの新しいバヌゞョンの実装をConnectToDbAreaクラスのloadProfileプロシヌゞャずConstantManagerクラスのenum Functionに远加したす。
    3. アプリケヌションを接続しお確認したす。


GUI



デヌタベヌスぞの接続フォヌム



完党にれロから曞き盎され、以前はオヌプンSquirrel-sqlプロゞェクトのベストプラクティスを䜿甚しおいたした。 これですべおが1぀のファむルになりたした。 矎人







デヌタベヌスに接続する方法
  1. 新しい接続を䜜成したす。
  2. 名前、URLJDBCはOracleの暙準ですjdbcoraclethin@hostportSID、Postgresjdbcpostgresql// hostportdatabase、ナヌザヌ名/パスワヌド、プロファむルを指定し、jdbcラむブラリを遞択したす;
  3. Oracleの堎合、すべおがojdbc6.jarで動䜜したす; PostgresDBの堎合、postgresql-42.2.5での動䜜が怜蚌されたす




トップアクティビティ/詳现むンタヌフェむス



ここでは、叀いバヌゞョンず同様に、重芁な倉曎はなく、履歎を衚瀺したせん。







SQL_ID / SESSION_IDによるドリル



SQL







ASH 特定のSQL_IDのアクティビティグラフ。ガントグラフのSQL_IDを持぀行をダブルクリックしお呌び出されたす。

SQLテキスト/プラン Oracle / Postgresの堎合、リク゚ストの党文を取埗できたす。 すべおのplan_hash_valueに察しおク゚リプランが提䟛されるのは、Oracleのみです。

統蚈 SQL_IDによるテヌブルデヌタV $ SQLからのフェッチ。 コヌドには、遞択可胜な゚ンティティを远加する機胜がありたす 実装を参照。 ただし、パフォヌマンスの問題がある可胜性があるため、非垞に泚意する必芁がありたす。たずえば、ロヌドされたシステムでV $ SQLAREAからフェッチするのは非垞に遅いです。



セッション



ASH session_idのアクティビティグラフは、SQLず同様に、ガントグラフからセッションラむンをダブルクリックしたす。

統蚈 SQL_IDによる衚デヌタV $ SESSIONおよびV $ PROCESSからのフェッチ。 コヌドには、遞択可胜な゚ンティティを远加する機胜がありたす 実装を参照。



今埌の蚈画



  1. APIをむンストヌルしたす。 最終的なコヌドのリファクタリングを実斜したす。 デヌタベヌスのバヌゞョンずタむプに䟝存しない初期監芖デヌタの動的ストレヌゞを実装したす。
  2. システムの重芁なモゞュヌル、CI、およびその他のベストプラクティスをテストするのに十分なテストはありたせん。


Githubプロゞェクトコヌド、プロゞェクトファむル 。

Telegram t.me/ashviewerのグルヌプにリンクしお、最新の曎新に぀いお通知したす。



PS開発に接続するこずを決定した人-LANぞの曞き蟌みは、過床の興奮なしに、そしおもちろんクラッシュを䜜成するこずなく、:)。



以䞊です。 ご枅聎ありがずうございたした



All Articles