いよいよ大詰め! ダッシュボードのコーディング
では、ダッシュボードの処理をJavaScriptで実装しましょう[3]。新たにファイルを作成し、index.htmlという名前で保存してください。
まず、1日目と同様に、Amazon Cognitoからテンポラリの認証情報を取得します。
var params = { IdentityPoolId: "us-east-1:xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", }; AWS.config.region = 'us-east-1'; AWS.config.credentials = new AWS.CognitoIdentityCredentials(params);
IdentityPoolIdには実際の値をセットしてください。
えっと、名前じゃなく、IDのほうですよね。はい、設定しました。
続いて、Amazon DynamoDBから集計値を取得します。counterテーブルからevent_idが1の項目を取得してデータを取り出し、グラフ用に配列を作ります。グラフの描画には、D3.jsというライブラリとそのラッパーライブラリであるNVD3を使います。描画するための元データとしてAmazon DynamoDBからデータを取り出して配列を作成します。
var dynamodb = new AWS.DynamoDB(); var dynamodbTable = 'counter'; var chartData = new Array(); function getData(){ var params = { TableName: dynamodbTable, Key: { 'event_id': { N: '1' } } }; dynamodb.getItem(params,function(err, data) { if (!err) { setData(data['Item']); }else{ console.log("Error: " + err); } }); }; function setData(data){ var d3Data = new Array(); var inData = {}; var finalData = new Array(); var arrData; for (var element in data) { if(element != 'event_id'){ d3Data.push({"label":element,"value":parseInt(data[element]['N'])}); } } inData.key = "Cumulative Return"; inData.values = d3Data; finalData[0] = inData; drawChart(finalData); }
getData()
でDynamoDBのcounterテーブルからevent_idが1の項目をgetItem()
というメソッドを用いて取得します。そして、getItem()
ではコールバックとして、取得した値をグラフ用配列にセットする関数として用意したsetData()
を呼び出しています。setData()
では受け取った配列をもとにD3.js用にデータを用意し、最後にグラフを描画するdrawChart()
という関数を呼び出しています。
drawChat()
という関数の中身は次のように用意します。
function drawChart(d3Data) { nv.addGraph(function() { chart = nv.models.discreteBarChart() .x(function(d) { return d.label }) .y(function(d) { return d.value }) .staggerLabels(true) .tooltips(false) .showValues(true); d3.select("#chart svg") .datum(d3Data) .call(chart); nv.utils.windowResize(chart.update); }); };
最後にここで実装したgetData()
を1秒(=1000ミリ秒)に1回実行するようにします。
setInterval("getData()",1000);
また、HTMLファイル内でグラフを描画したい位置に以下のタグを挿入します。
<svg id="chart" class="barChart"></svg>
保存したらAmazon S3に、このファイルをアップロードしましょう。
aws s3 sync
コマンドを使うんでしたね。1日目でもやりました。
aws s3 sync <ファイルが格納されたフォルダのパス> s3://<バケット名>
[3] 本連載で作成している「スマホフレーフレー言語応援アプリ」の全コードは、AWS Summit Tokyo 2015 デベロッパーカンファレンスの開催後(6月3日以降)に公開します。入手したい方、ご興味のある方は開催後に本連載を再度ご覧ください。