Event Hubs es un servicio de Azure que permite agregar y procesar millones de eventos por segundo. Es muy útil para almacenar datos en tiempo real o de forma batch.
Hace un tiempo se liberó el sdk para trabajar vía Javascript (+ REST) con Event Hubs. https://github.com/ddobric/ServiceBusJavaScriptSdk
En este post lo usaremos para hacer un custom analytics para sitios de Sharepoint o para evaluar en tiempo real quién se conecta al sitio. Hace algunas semanas Microsoft libero Azure Insights para hacer el tacking del uso en sitios (http://azure.microsoft.com/en-us/services/application-insights/). La idea es mostrar cómo se podría hacer con Azure Event Hubs, y tener tu propio Azure Insights.
el sdk requiere algunos parámetros
var queuePath = "sharepointanalytics";
var ehClient = new EventHubClient(
{
'name': queuePath,
'devicename': 'urlsitio', // es la especificación para “partition key”
'namespace': "sharepointanalytics-ns",
'sasKey': "gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ",
'sasKeyName': "RootManageSharedAccessKey",
'timeOut': 10,
});
‘queuePath’ es el nombre del Event Hub
'devicename' se usa cómo key de partición, ver el siguiente link: https://msdn.microsoft.com/en-us/library/azure/dn836025.aspx
'namespace': es el nombre del service bus
'sasKey': es el nombre de la policy de acceso del service bus, 'sasKeyName': es la primary key de la policy de acceso.
Ej: Endpoint=sb://sharepointanalytics-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ=
En el sdk, hay un archivo llamado EventHubSamples.html, lo edito y
Agrego el siguiente código html (lo importante en amarillo)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Service Bus JavaScrcipt SDK QueueClient Test Page</title>
<link rel="stylesheet" href="css/main.css" type="text/css" />
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"> </script>
<script src="Scripts/servicebusjssdk-1.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var queuePath = "sharepointanalytics";
var ehClient = new EventHubClient(
{
'name': queuePath,
'devicename': 'urlsitio', // This is by specification partition key.
'namespace': "sharepointanalytics-ns",
'sasKey': "gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ=",
'sasKeyName': "RootManageSharedAccessKey",
'timeOut': 10,
});
$("#btnSend").click(function () {
var eventBody = { "Horario": "22/02/2015 10:00 am", "Pagina": "Home.aspx", "sitio": "http://contoso.com", "usuario": "christianazcon" };
var msg = new EventData(eventBody);
ehClient.sendMessage(msg, function (messagingResult) {
$("#result").html(messagingResult.result);
$("#eventData").html(JSON.stringify(eventBody));
});
});
});
</script>
</head>
<body>
<button id="btnSend">Send</button>
<div class="message-wrapper">
<p>Event Data:</p>
<div id="eventData">
</div><br />
<p>Message Body:</p>
<div id="result">
</div><br />
</div> <!-- END: .message-wrapper --></body>
</html>
En la página se ve así:
Presiono Send, me retorna “Sucess”
Ahora abro Service Bus explorer, https://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a
Y veo que ya aparece el mensaje que envie
Ahora tendrás que revisar en que partición cayó el mensaje, ej: 5
Presiono Start
Cómo pueden ver, aparece el texto del mensaje.{"Horario":"22/02/2015 10:00 am","Pagina":"Home.aspx","sitio":"http://contoso.com","usuario":"christianazcon"}
Esto nos permite agregar un montón de eventos a las páginas mediante javascript y guardarlas en un Event Hub, y procesarlos a posteriori.
Por ejemplo para tomar el usuario logueado, puedo usar el siguiente script: https://lixuan0125.wordpress.com/2013/05/10/sharepoint-2013-get-current-user-loginname-using-jsom-rest/
Ej:
- Eventos que realiza el usuario (donde hace click, cuanto tiempo está en cada página, etc)
- Información de navegadores
- etc