首页 > 云开发 > Python > 正文

后台-系统设置-扩展变量-手机广告位-内容正文顶部

5分钟,通过Microsoft Flow管道磁带应用程序分析

Python

5分钟,通过Microsoft Flow管道磁带应用程序分析

现在,让我告诉你为什么这个前言本不是一个好主意,因为它不是。

对于我非常具体的用例,我想跟踪我的桌面(VB.NET ......我知道,我正在学习C#)应用程序是在客户端计算机上启动的,以及在使用过程中发生的任何错误。我不需要任何重要的分析,而且我没有能力构建RESTful API端点来接收分析(企业网络等)。此外,没有多少人会使用该应用程序。

理想情况下,可以构建一个可以使用Django,RoR或任何其他Web框架处理这些请求的API。它真的是要走的路,因为它更加灵活,你可以提供大量的资源,而且真的......这是一个漂亮的管道胶带,超强力的解决方案。

另一方面,我需要一个快速而肮脏的解决方案来测试我的概念证明,并且没有足够的资源来设置Web服务器。所以,不用多说,我的解决方案!

首先,使用“ 收到HTTP请求时”触发器创建新流。

列表中的第一个!

您可以为流指定所需的任何JSON模式。目前,我有以下架构:

datetime  - 这个应该是相对不言自明的。
type  - 目前我有两种类型的分析:boot  -  用于应用程序启动时发送的分析,以及错误  - 用于发生错误时发送的分析。
error_message  - 也很明显不言自明。
error_value  - 发生错误的堆栈跟踪。
application_version  - 再次,是的。
ip  - 实际上用于操作系统版本(我需要更改它,我知道)
guid  - 应用程序生成的通用标识符(可以轻松跟踪有多少用户发送分析)

{
  "datetime": "3/28/2019 9:16:58PM",
  "type": "boot",
  "error_message": "",
  "error_value": "",
  "application_version": "1.1.0.0",
  "ip": "Microsoft Windows NT 6.1.7601 Service Pack 1",
  "guid": "bc6a61af-5ddf-4cb3-a9dc-b734b4c93957"
}

我的示例有效负载,注意我不可思议的懒惰,没有将ip更新为相关的名称,如版本。
您可以快速将样本JSON有效负载放在一起并将其提供给Flow触发器。它会生成它自己的架构来处理它,它有多整洁!

转储示例JSON有效内容后,您的流应该是什么样子。(注意:在保存项目之前,不会填写HTTP POST URL)

现在,所有要做的就是将数据放入您想要使用的任何存储介质中!Flow具有Postgres,MySQL,SQL Server,一堆Azure内容的连接器,甚至更多。您甚至可以使用本地数据网关将本地SQL Server实例连接到流!(https://docs.microsoft.com/en-us/power-bi/service-gateway-onprem)。

为了这个例子,我创建了一个SharePoint列表来快速存储数据。但严肃地说,这些数据应存储在某种适当的数据库中。

SharePoint列表的示例模式。不要使用SharePoint,它绝对不是存储这些数据的正确方法!

将流量连接到您选择的数据存储也非常容易。只需从列表中选择它,您就可以神奇地显示示例模式中的所有JSON对象,以便将它们添加进来!

非常简单!

我还使流程在成功接收请求后返回HTTP状态代码200。它位于数据存储的并行分支上。您可以让它返回您想要的任何内容,但是我保持简单,因为应用程序确实不需要从服务器获取任何数据。

返回... .Success的HTTP状态代码200!

所以,在你完成所有这些之后,你应该准备好节省流量。这将生成可用于POST到流的URL。如果提交的JSON模式与提供的样本有效负载不匹配,则流程甚至会返回4XX状态代码,以便让您知道出现问题!如果您已经按照这个快速教程进行操作,那么您的流程应该类似于此(除非没有SharePoint!):

希望你的流程与此非常相似!

您现在可以启动您喜欢的编程语言,或Postman来测试API端点!Postman非常方便您测试您的新奇,管道胶带的想法是否有效。只需复制并粘贴保存流时生成的HTTP POST URL,然后将示例模式粘贴到请求正文中,如下所示:

包含我的样本有效负载的POST请求 服务器响应HTTP状态码200!成功!

如果您查看存储数据的任何位置,您应该会看到一个包含您发送到服务器的数据的新条目!

双重成功!有用!

您还可以实时测试流量,并调查早期弹出的任何问题。只需按下右上角的测试按钮,然后使用Postman发送POST。

好哇!

就是这样。管道胶带分析在5分钟以内!你也可以使用Flow做更多的事情。您可以在其中添加一些if语句来分隔不同类型的分析并将它们存储在不同的表中,或者在发出特定类型的请求时将通知发送到您的电子邮件。天空是极限!

但是要警惕这种方法的缺陷。它绝对不是为大量数据而设计的,我不确定该URL是否是100%静态的。无论哪种方式,只要您认识到陷阱,这对于一些简单的分析来说就是一个简单的解决方案。

示例代码
下面是VB和Python中用于项目的一些示例代码!

快乐编码:)

Public Class ApplicationTracking
    Public Sub New()
    'Do nothing, I'm sure you could do something neat here :)
    End Sub

    Public Async Function Post(Optional callType As String = "boot", Optional errorMsg As String = "", Optional errorVal As String = "") As Task(Of Net.HttpStatusCode)
        'Generates JSON POST string
        Dim url As String = "YOUR MICROSOFT FLOW URL HERE"
        Dim postData As String = """datetime"": ""{0}"", ""type"": ""{1}"", ""error_message"": ""{2}"", ""error_value"": ""{3}"", ""application_version"": ""{4}"", ""ip"": ""{5}"", ""guid"": ""{6}"""
        postData = String.Format(postData, DateTime.Now.ToString(), "boot", errorMsg, errorVal, "1.1.0.0", Environment.OSVersion, My.Settings.Guid)
        postData = "{" & postData & "}"
       
        'Generates Request content w/ JSON string
        Dim content As New Net.Http.StringContent(postData, Text.Encoding.UTF8, "application/json")
        content.Headers.ContentType = New Net.Http.Headers.MediaTypeHeaderValue("application/json")

        'Sends the POST and returns the HTTP Status Code
        Using client As New System.Net.Http.HttpClient
            Dim r As Net.Http.HttpResponseMessage = Await client.PostAsync(url, content)
            Return r.StatusCode
        End Using
    End Function
End Class

用于跟踪的VB.NET类(需要引用System.Web.Extensions)

import requests
import datetime as dt
import platform

class AppAnalytics:
    def __init__(self):
        #Nothing at the moment :)
        pass

    def post(self, guid, post_type='boot', error_message='', error_value='', app_version='1.1.0.0'):
        payload = {
            'datetime': dt.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            'type': post_type,
            'error_message': error_message,
            'error_value': error_value,
            'application_version': app_version,
            'ip': platform.platform(),
            'guid': str(guid)
        }
        flow_url = 'YOUR FLOW URL HERE'
        #Posts the payload to the url, requests automatically encodes the dictionary :)
        r = requests.post(flow_url, json=payload)
        #Returns the HTTP Status Code (You can use this to check it sent the data correctly)
        return r.status_code

用于跟踪的Python类

文章来源:medium,作者:。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:william.shi#ucloud.cn(邮箱中#请改为@)进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
后台-系统设置-扩展变量-手机广告位-内容正文底部

推荐文章

热门标签

    热门文章 最新文章 文章云

站内导航

全站搜索