0
私はminiprofilerでセイルフックを設定しようとしています。私は、プロファイルを実行する関数にdbメソッドをラップする方法については苦労しています。プロファイリングのためにsails-mongo dbメソッドをラップする方法はありますか?
setupMiniprofilerMongo(req, res, next) {
const adapter = sails.hooks.orm.datastores.default.adapter;
const adapterPrototype = Object.getPrototypeOf(adapter);
const originalMethod = adapter.adapter.find;
methodPrototype.find = function profiledMongoCommand(connectionName, collectionName, options, cb) {
sails.log.info(`${collectionName}.find`);
return originalMethod.call(adapter, connectionName, collectionName, options, cb);
};
}
次のエラーがスローされます:
TypeError: Cannot read property 'collections' of undefined
at Object.module.exports.adapter.find (/Users/jgeurts/dev/platform/node_modules/sails-mongo/lib/adapter.js:349:40)
at Object.profiledMongoCommand [as find] (/Users/jgeurts/dev/platform/config/http.js:234:37)
任意の助けをいただければ幸い私は、ユーザーのフックを経由して、これをやろうとしています。私はmongodbパッケージにメソッドをラップしようとしましたが、どちらもうまくいかないようです。 :/
がどの層ではあなたがプロファイラフックしたいですか、あなた自身のプロジェクトでそれを使用miniprofiler-waterlineとして利用できますか?私はそれがあなたがアプリケーションレベルかセイルモンゴーかネイティブモンゴーnodejsドライバーの中でさえ繋がっても違いがあると思います。そして、あなたのエラーは未定義のコレクションをセーリングしますが、あなたが提供したコードにはコレクションの使用法はありません。 –
@zabwareこの必要性のために、私がセイル・モンゴーまたはネイティブ・モンゴーにフックしているならば、私は無関心です。私は主に、クエリーがどれくらいの時間を要したのか、また、水路が結果を解析するのに要した時間を減らすことを追求しています。 'collections'オブジェクトは、アダプタクロージャの内部で定義されています。残念ながら、簡単なアクセサーを持たないようです。 –
生のmongodb呼び出しをプロファイルすることができれば理想的です。これは、ネイティブクエリーが使用されている場合と、水線構文が使用されている場合を考慮します。水線オブジェクトグラフを介してmongodbアダプターのインスタンスを取得することは私には分かりませんが –