nmon Analyzer ver.66 を MacOSで利用する

:::note info
2023/02/09
3章　構成を再編成
"3.3" 追記
:::
:::note info
2022/05/06 
"1.OS環境差異による文字非互換の修正 "へ加筆、その他 微修正
:::
#### 経緯・課題
システム開発の統合テストやソリューショニング段階のサイジングなど、現行システムリソース(AIX)を調査する際は、nmonファイルとnmon Analyserを使って現行のCPU負荷やメモリ、diskIOなどを調査することが多いと思います。

Mac環境(utf-8)の場合、そのままではnmonAnalyzerのマクロを実行してもエラーを起こしてしまうため、Mac用の修正箇所を備忘録として残しておきます。
(2022/05/06追記)
 公式サイト(英語)ではMac対応と書いてありますので、当記事は日本語環境だと発生してしまうエラー箇所への対応のみ記載しています。

---
#### 前提・環境など
・nmon Analyser v66 (2020.01.08 release) [ダウンロード](http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser)
・MacOS Big Sur (11.3.1)
・Microsoft®︎ Excel for Mac (ver.16.48, 21041102)
・AIX OS のシステムリソースを記録した、 **"*.nmonファイル**" を対象サーバで取得済み

---
#### 参考知識
・[Excel VBA](https://www.officepro.jp/excelvba/basic/index6.html)
・[nmon analyser (IBM)](https://developer.ibm.com/technologies/systems/articles/au-nmon_analyser/)

---
#### オリジナルファイルへの修正変更点

##### 1.OS環境差異による文字非互換の修正 
　Windows用に開発されたnmon AnalyserをMacOSで開くと、**"Shift-JISの¥(円記号)**"が、Macでは**"UTF-8の\(半角バックスラッシュ)"**で表記されてしまっているので、VBAソースコードの該当箇所を、移行先のMac環境で**"¥(円マーク)"**に置換します。ちなみにVBAにおける**"¥"**は、**"割り算の商"**を意味します。(前述の参考知識をご参照ください)。

　該当箇所は、Module1の２箇所
・**"QuickSort"** 関数定義内の*"pivot = vArray((inLow + inHi) \ 2)"*
・**"ConvertRef"** 関数定義内の*"ConvertRef = Chr((inVal \ 26) + 64) & Chr((inVal Mod 26) + 65)"*

<details><summary>(例1):VBAprojectのModule1を修正する。</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/05bc1227-fab7-5fed-3534-ed0a67ec590c.png)
</details>

<details><summary>(例2):修正箇所１</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/822d85c8-4426-2633-d0be-01ceca585794.png)
</details>

<details><summary>(例3):修正箇所2</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/4e82ca49-a0b5-edff-924e-f3b8f5666ef2.png)
</details>

<details><summary>(2022/05/06追記):修正箇所の概要</summary>

　QuickSortは、nmonのオリジナルファイルから読み込んだ全行を辞書順に並び替える処理で、ProcessFileコールの中で利用されています。pivotはいわゆるクイックソートアルゴリズムの基準値で、ここでは配列の真ん中の値をpivotに指定しています。

ちなみに、Analyze nmon dataの概要を説明すると、以下のようになります。
>1.ProcessFileコールでnmonファイルデータの整列
　ソースのnmonファイルはシート名(セクション)をヘッダとするカンマ区切りのテキストデータなので、セクションごとのシートを作成するためにまずセクション名(+時系列順)にソートしています。たとえば、最初の方の行に<i><b>"AAA,AIX,7.1.5.35"</b></i>というようなOS固有の<i><b>"AAA"</b></i>セクションの行が並び、それらの後に<i><b>"DISKBUSY,T0275,0.1,0.1"</b></i>というような<i><b>"DISK"</b></i>セクションの行が時系列順に並ぶように処理をしています。

　
>2.上記データをCSV形式に変更

>3.NMONコールで揃えたセクションごとに行を読み込み、新規シートにデータコピー処理、またシートごとのグラフ化処理などを個別に呼び出し
　

　ConvertRefはグラフ貼り付け位置のセル指定の前処理に使われる関数で、Excelの<b><i>"A1"</b></i>や<b><i>"AC21"</b></i>のようなセル指定の<b><i>"列指定部分"</b></i>を表現するための関数です。処理中に呼ばれているChr関数は、<b><i>65~90</b></i>の数字をそれぞれ<b><i>A〜Z</b></i>の26種類の文字型に変換する関数で、ConvertRef内ではA~Z列(一文字)とAA列(二文字)以降の処理を分けて変換をしています。


</details>

参考URL：[円マークとバックスラッシュの文字コード](https://qiita.com/alt_yamamoto/items/578cb9da6a2225030632)
参考URL：[Windowsなチームの中でMacを使うときに必要な知識](https://qiita.com/e_tyubo/items/09c7144b90c70b164ca6)
参考URL :[ Chr function](https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/chr-function)






##### 2.nmon Analyzerの実行

　上記マクロの修正をしたのち、
Analyser シートの**"Analyze nmon data"** ボタンを押すと、Button2_Clickマクロからmain()関数などが呼び出されます。

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/bb6b5015-5240-be87-968a-01d3fb165926.png)



　nmonファイルを要求されるファイル選択ウィンドウが出るので、対象のnmonファイルを選択します。Cmdボタンを押しながらファイルをクリック選択すると１個ずつ対象追加、Shiftボタンを押しながらファイルを２つクリック選択すると連続した複数の対象ファイルを一括選択できます。

>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/b4137cf1-3512-70cb-35d1-422f0e861582.png)


　ファイルの数によって処理時間は変わりますが、選択した分の新規ワークブックが開き、おなじみの**"SYS_SUMM"**シートなどが展開されていくのを数分待ちます。
　最後に、出力ファイルとnmon analyserXXX.xlsmファイルが保存・終了され、処理対象のファイル一覧が記載されたワークブックが新規作成されます。(このファイル自体はサーバー名と出力ディレクトリの確認の意味くらいしかないので、保存する必要はないと思います。)

　指定した対象nmonファイルと同じディレクトリにxlsxファイルが出力されていれば、完了です。

##### 3.Tips集

###### 3.1 おまけ　Settingsシートなどの注意
　初めに書いたように、Windows環境で¥と記載された箇所はMacでは\になります。例えばファイルディレクトリの表現にもWindowsでは¥を区切りに利用しますが、SettingsシートでOUTDIRを指定しようとしても、Macでは/(普通のスラッシュ)がディレクトリ区切りになりますので、そのままのVBAでは動きません。
　
><details><summary>OUTDIRの処理箇所(module1の660行目あたり)</summary>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/433398/92467bfe-8817-0844-39d9-c7fda3728b43.png)
</details>

　こういったファイルパス関連は特に互換性がないので、MACでnmon_Analyzerを利用する場合は、option変更せずに使うか、自力で直す必要があります。OUTDIRを指定しない場合(デフォルトのまま変更なし)、前述の通り入力指定したnmonと同じディレクトリにxlsxファイルが出力されます。

　また、これら出力された複数のWorkBookから、AppleScriptを使ってnmon結果をサマリーレポートしやすく整理する工夫もしたのですが、それは別の記事にまとめたいと思います。

###### 3.2 配置するnmonデータのフルパス名 注意点 (2021/06/25追記)
　2のxlsxファイル作成プロセスでファイルパスを指定する際に、日本語フォルダ名などが含まれると「ファイルパスが誤っている」という旨のエラーになりnmonファイルをOpenできません。作業ディレクトリ名は無難にASCII半角英語の範囲で収めてください。
　
###### 3.3 データ区切りについての注意点 (2023/02/09追記)
　nmon analyzer でもとのnmonファイル(テキスト)からデータをシートにコピーする際に、"データ区切り"をスペース設定などにしていると、データ区切りが反映されて、各シートのカラム数計算がバグります。(補足説明もカラムとしてカウントされてしまう）

　nmon以外の作業でエクセルを利用していた場合などは、"データ区切り"の設定をデフォルトに戻すために、一度完全にエクセルプロセスを停止・再起動させてから、nmon analyzerを実行すると、上記の意図しない挙動を回避できます。