domingo, 3 de mayo de 2015

Azure Services Bus (Events Hubs) con Sharepoint

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.

image

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.

image

image

image

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

image

'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

image

'sasKey': es el nombre de la policy de acceso del service bus, 'sasKeyName': es la primary key de la policy de acceso.

image

image

Ej: Endpoint=sb://sharepointanalytics-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=gIAsGZEd3kObjQN9gvnx7wRjm3Hf97aBmFyXWbszBtQ=

En el sdk, hay un archivo llamado EventHubSamples.html, lo edito y

image

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í:

image

Presiono Send, me retorna “Sucess”

image

Ahora abro Service Bus explorer, https://code.msdn.microsoft.com/windowsazure/Service-Bus-Explorer-f2abca5a

Y veo que ya aparece el mensaje que envie

image

image

Ahora tendrás que revisar en que partición cayó el mensaje, ej: 5

image

Presiono Start

image

image

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

No hay comentarios:

Publicar un comentario