くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

2016年06月

SQLServerExpress2012でProfilerを使いたい

SQLServerのExpressはProfilerが使えない。なので、クエリを拾いたい場合は別のツールが必要。個人的にこのExpressProfilerがいい感じ。

↑のサイトでdownloadのリンクからインストールファイルをDLしてインストール。

実行すると↓の感じ。
01

そしたらサーバを指定して、Windows認証かSQLServer認証のどっちか選んで、SQLServer認証だったらID/PASSを指定しておく。

で、あとは実行クリック。
02

Webアプリ動かすと、下の感じでクエリが取れる。
03

フィルタのボタン押すと、フィルタがいろいろ出てくる。

いちを↑のTextDataのところに拾いたいSQLの中身の一部を書いておくとそのクエリだけ拾えたりする。ただ、一個しかつけれなさそう。まぁ、家とかでちんまりやる分には十分かと。。。

.netMVCのUser.Identityに拡張メソッドつける

認証に独自のユーザー定義をもってやってる場合、User.IdentityってNameしかプロパティがなくて、せっかくあるのにほぼ使えない。Sessionに登録しておくとかしかないかなーといっつも考えてたけど、そーいえば、拡張メソッドでいけるのだろうかと。やってみたらフツーに行けた。みんなこーやってるのかしら。割と楽だ。

拡張メソッドつけるときは下の感じ。

public static string UserTrueName( this System.Security.Principal.IIdentity pId)
{
    string result = "";

    //ユーザーの氏名を取得する処理的なサムシングエルス

    return result;
}

//使うときは↓の感じ
User.Identity.UserTrueName();

まーでもマスタを毎回見に行くとかあり得ない気がするので、やり方は色々考えないとダメでしょね。でもセッションとってーごにょごにょしてーとか、HogeFugaBasePage継承して作らないとダメだろ―とかとかいらないので、これでどうにかしたい。

Global.asax側のリクエスト開始時の中でなんかやってもいいのかしらね。。。

JMeterで負荷テストみたいな事をやる

社内用にちんまいWebアプリを作って運用してたりするけど、最近、利用が拡大してきたので、負荷的に耐えれるのか心配になり、ちょっと負荷テストをやってみる。JMeterを使用したけど、そのあたりのメモ。いろいろ解説サイトがあるんだけど、正直あーだこーだ多すぎて、とりあえずやるってものがない。なのでとりあえずやるって感じの場合。

なんとゆーか全体的にもろもろの解説サイトのノリがアレな感じがして、ちょっと引いた。最近Java触ってないけど、近頃のJavaちっくな人たちはあーゆーノリが多いのだろうか。。。。

まぁいいや。とりあえず本家からダウンロード。DownloadsのBinariesから。zipの落とせば問題ないはず。

展開したら、中のbinの「jmeter.bat」で起動かな。念のため右クリ⇒管理者で実行でやる。起動したら初画面は↓の感じ。

no title

まずは、テスト計画に「スレッドグループ」を作る。
1

そしたら、スレッドグループに「記録コントローラ」作る。
2

次は、ワークベンチにHTTPプロキシを追加する。
3

で、このプロキシを動かして、ブラウザでこの子を通して、テストしたいサイトにアクセス。テストしたい手順を自分の手で一回やって、プロキシ側で記録コントローラにテストシナリオのスクリプトが作られていくとゆー寸法です。

プロキシのデフォ設定は↓の感じ。
5
ポートとか特に問題なければ開始をクリック。
あー、クリックすると↓のポップアップでるけど、気にせずOK。
6

そしたら、ブラウザのプロキシをこの子につなぐように設定してあげる。↓の感じ。IEの場合。
7
8

あとは、ブラウザでサイトにアクセスすると、記録コントローラにGetしてるURLがどんどんたまる。ログインとかも大抵は問題なく行けるはず。↓の感じ。
10

テストしたい手順をやり終わったら、プロキシ止める。ブラウザの設定ももとに戻しておいた方がいいと思う。

そしたら、テストをやるのですが、何もしてないと手順を実行するだけで、結果がどーなったのか全く分からない。なので、スレッドグループに以下のものを追加しておく。
11

で、実行する。↓の感じ。
13

しばらくすると、テストが終わるので、結果を見る。一番見やすいのは↓の「統計レポート」かな。
14

ここまでで、「とりあえずやる」的な感じ。色々見てると、自分でスクリプト作って~~みたいな事を書いてあったりもするけど、正直そこまでやる気は微塵もなかったりする。これだけ動けば9割くらいは十分でしょ。。。

あと、負荷を計算するのに以下を知っておかないとつらそー。

総テスト回数: スレッド数 × ループ回数
1秒当たりのテストの回数: 総テスト回数 ÷ Ramp-Up期間

Ramp-Up期間がわかりにくい。スレッド数×ループ回数の実行をRamp-Up期間の秒数内で実行するという事らしい。なので、Ramp-Up期間は基本固定なんじゃないかと思う。

あとは、知っておくと便利なとこ。

テストの統計情報はずっとたまり続けるので、パラメータ変えていろいろやりたい場合はその都度クリアが必要。クリアしたい場合は↓のボタン。
15

右上の↓のやつが一体何なのかよくわかんなかったけど、
16
実行しているスレッド数らしい。これが0になればテスト完了みたいな扱い。

.netMVCでアクセスログはどこに書くか

.net MVCで独自にアクセスログを取りたくなった。どこに入れるのが正解なのかよくわからない。 何となくGlobal.asaxにリクエスト来たときに書けばいいのかと思い、↓でとってみる。

public class MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
	{
	    //アプリの起動時の処理
	}
        //↓これで書く
	protected void Application_OnBeginRequest(object sender, EventArgs e)
	{
	    // HTTP リクエスト処理開始時の処理
	    WriteLog();//ログをはく
	}
}

「Application_OnBeginRequest()」だとリクエスト来た時に全部拾えるからここがいいかなーと思ったけど、 User.Identityとゆーか認証の状態がとれかった。まぁ当たり前ですか。。。

認証後の状態はいつかなーで見てたら⇒でした。「Application_OnAuthenticateRequest()」これの中に書けばUser.Identityとかちゃんと取れる。ログイン前はNullってるけども。

リクエストのライフサイクル的な話はココで見れる。いろんなブログとかもあるけど、やっぱまず、MSDN見たほうがいいと思う。

で、とりあえず、アクセスログっぽいものはこれで作れたんだけど、なんとなく、ほんとにココでいいのか自信が持てない。動作上は特に問題無いよう思えるんだけど。。。

あと、ログ取ってみて思ったけど、やっぱSignalRはすげーコネクション使うのね。なんかこんなに接続しちゃってよいのだろーかと不安になるくらいつなぐ。最近のWebはこんなもんなのだろうか。。。

D3使ってワードクラウドを作る

以前(とか)、Rでワードクラウドを作るのをやったけど、やっぱ固定の画像じゃなくしたい。とゆーわけで、D3使ってSVGで作れるようにしたい。テキストクリックで何かにリンクとかさ。出来たらいいなー。

とりえあず、ランダム配置で作ってみる。↓の感じ。

tamesi

うーん、イマイチ。イマサンくらい。とりえあず、文字が重ならないようにはすぐできた。 getBBox()っていうのが組み込みにあるのね。初めてしった。まぁ、こーゆーことやろうとしないと 用途がなさそうだしの。。。

フォントサイズとか色の段階のつけ方を工夫すればもうちょっとよくなるかしら。 配置の仕方も調べてみたけど割とめんどーな気がする。とりえあず、サイズと色の工夫をしてみましょ。

問合せ