新遗数字智能平台帮助现代的IT、开发和运营团队利用其数据的力量来提高其应用程序、基础设施和业务的性能。但如果把这种权力用在更邪恶的目的上呢,比如监控一个梦幻足球联赛?

我刚刚开始在New Relic工作,我想自己玩玩这些工具,以便更好地了解它们,所以我决定使用它们新的遗物见解AWSλ(搭配新遗物AWS Lambda监测集成)去了解我的《梦幻足球联赛》中的各种数据。(注意我也是幻想足球的新手,但并不像我看起来那么新鲜。)

提取雅虎数据

以下是我在《雅虎幻想足球》应用中的幻想球员名单。这是我想要提取的一些初始数据。

唱名_2.

要从雅虎梦幻体育API我编写了一个非常简单的Python脚本,将数据直接推送到Insights API。我只是不得不注册插入键为了安全,并为我可以发送数据的地方提供一个洞察URL。

这是我写的Python脚本:

导入请求导入xml.etree.elementtree从请求_oauthlib导入oauth1 url_settings_in ='https://fantasysports.yahooapis.com/fantasy/v2/league/nfl.l.261594/settings'Url_Players_in ='https://fantasysports.yahooapis。COM / FANTASY / V2 / TEAM / 371.L.261594.T.12 /名册/玩家/统计数据r_strantings_in ='https://fantasysports.yahooapis.com/fantasy/v2/league/nfl.l.261594/stantings'url_out ='https://insights-collector.newrelic.com/v1/accounts/1652861/events'auth_in =OAuth1(“dg7tl…”,“66 f47…”)auth_out = 'qa3k1n ......{"Content-Type": "application/json", "X-Insert-Key": auth_out} ns = {'v2_ns': 'http://fantasysports.yahooapis.com/fantasy/v2/base.rng'} def yahoo_to_newrelic(事件,上下文):#从yahoo req_settings = requests获取联盟设置数据。get(url_settings_in, auth=auth_in) settings_tree = xml.etree.ElementTree.fromstring(req_settings.content) settings_dict = {} for stat in settings_tree.findall('v2_ns:league/v2_ns:settings/v2_ns:stat_categories/v2_ns:stats/v2_ns:stat',ns): stat_id = stat.find('v2_ns:stat_id', ns)text display_name = stat.find('v2_ns:display_name', ns)。text settings_dict[stat_id] = display_name print settings_dict #从yahoo req_players = requests获取球员数据。get(url_players_in, auth=auth_in) players_tree = xml.etree.ElementTree.fromstring(req_players.content) player_payload =[]在players_tree的球员。findall('*/v2_ns:花名册/v2_ns:球员/v2_ns:球员',ns): name =球员。找到(v2_ns:名称/ v2_ns:完整,ns)。text bye_week = player。找到(v2_ns: bye_weeks / v2_ns:星期,ns)。text display_position = player。找到(v2_ns: display_position, ns)。文字周=球员。找到(v2_ns: player_points / v2_ns:星期,ns)。total_points = player。找到(v2_ns: player_points / v2_ns:总,ns)。text temp_payload = {"eventType":"ff_player_update", "name": name, "bye_week": bye_week, "display_position": display_position, "week": week, "total_points": total_points} for stat in player.findall('v2_ns:player_stats/v2_ns:stats/v2_ns:stat',ns): stat_id = stat.find('v2_ns:stat_id',ns)text value = stat.find('v2_ns:value',ns)。text temp_payload[settings_dict[stat_id]] = value player_payload.append(temp_payload) print player_payload # Get the standings data req_standings = requests. text temp_payload[settings_dict[stat_id]] = value player_payload.append(temp_payload) print player_payload # Get the standings data req_standings = requests。get(url_standings_in, auth=auth_in) standings_tree = xml.etree.ElementTree.fromstring(req_standings.content) for team in standings_tree.find('v2_ns:league/v2_ns:standings/v2_ns:teams',ns): if team[2].text == "Togha na Rogha": position = int(team.find('v2_ns:team_standings/v2_ns:rank',ns).text) points = float(team.find('v2_ns:team_standings/v2_ns:points_for',ns).text) wins = int(team.find('v2_ns:team_standings/v2_ns:outcome_totals/v2_ns:wins',ns).text) losses = int(team.find('v2_ns:team_standings/v2_ns:outcome_totals/v2_ns:losses',ns).text) standings_payload = {"eventType":"ff_standings_update", "position": position, "points": points, "wins": wins, "losses": losses} print standings_payload # Send out player and standings data to New Relic r_player_data = requests.post(url_out, headers = headers_out, json = player_payload) r_standings_data = requests.post(url_out, headers = headers_out, json = standings_payload) if __name__ == "__main__": yahoo_to_newrelic("event","context")

让我来解释一下发生了什么:

  1. 该脚本定义了必要的url。雅虎API有三个url:url_settings_in,url_standings_in, 和url_players_in。新遗物API的URL是URL_OUT.。我还必须指定两个API所需的身份验证,以及New Relic Insights API所需的头信息。
  2. 我在Yahoo API中获取我的特定联盟的设置。在我的例子中,设置的重要部分是stat_id显示名称,我需要用它来查询Yahoo API以获得播放器统计信息。默认情况下,这些统计信息表示为stat_id和一个值。为了解决这个问题,我创建了一个Python字典来自动转换stat_id对观众更友好显示名称
  3. 然后该脚本将Yahoo API查询我团队上的玩家。首先,它会收集播放器名称,再见周,位置和点等信息,然后通过每个播放器可用的每个数据循环。每个玩家的信息都组织到词典中:“eventType ff_player_update”键/值对。这个键/值对决定了我在Insights中找到数据的位置,可以说,它是事件的名称。然后,每个玩家事件都被组织到另一个字典中,作为发送给Insights的整体有效载荷的一部分。
  4. 我也收集一些关于我的团队的一般信息。脚本在每个团队中循环,直到找到我的团队(“Togha na Rogha”),并收集关于我的胜利、失败、分数和整体地位的信息。
  5. 一旦收集所有数据,我将其发送到新的遗物。这发生在两个分开中邮政请求。的第一个请求发送有效负载的数据ff_player_update.的有效负载,第二个请求发送ff_standings_update。当然,我可以以相同的请求发送这两个有效载荷,但我想把事情保持独立,以防我需要扩展脚本以密切关注竞争对手团队。

触发云中的数据提取

接下来,我需要一些东西来运行我的脚本,但需要一个全面的东西亚马逊弹性云实例运行这样一个小脚本似乎有点小题大做。这时我想起来了AWSλ,它允许您执行代码或其他应用程序,而不需要首先配置服务器。

要设置Lambda函数,我必须指定一些基本信息,例如运行时环境和任何处理程序或角色。在这种情况下,我正在使用Python 2.7运行时环境。处理程序是app.yahoo_to_newrelic,以及lambda在文件中执行的方法是yahoo_to_newrelic()。对于Identity and Access Management (IAM)角色,我专门为Lambda函数创建了一个角色,该角色允许它执行我的脚本。

lamda_function.

您可以通过文本编辑器或以ZIP文件的方式将脚本添加到AWS Lambda中,我就是这么做的。然而,我的脚本需要一些额外的库,而这些库在AWS Lambda Python环境中是不可用的,所以我不得不这样做创建一个部署包上传到AWS Lambda。

AWS Lambda提供的无服务器服务革命的一部分,是基于触发器运行代码的能力,可以设置任何时间间隔。我设置了一个触发器亚马逊监测每15分钟运行一次脚本。
cloud_trigger

新的遗物见解和AWS Lambda集成

多亏了AWS Lambda监控集成的新遗迹,默认的仪表板让我直接了解了我的Lambda函数。它显示了大量的信息,比如函数执行需要多长时间,它运行了多少次,以及函数是否遇到任何错误。

lambda_dashboard

看看我的团队

现在我已经运行了脚本,我可以登录我的Insights帐户并查看每15分钟传入的数据。目前,我正在追踪自己的胜利、失败、总积分、在联盟中的位置以及(如下所示)个人玩家的各种数据:

player_data

但是我的团队的数据在这个仪表板上看起来很好:

team_dashboard_2.

现在我可以盯着我的团队了——在我写这篇文章的时候,我输了三场,只赢了两场,情况看起来不太好。但我有信心借助New Relic和AWS Lambda的力量,我能扭转这一季的颓势。还有很多球要踢呢。

肖恩·温特斯(Sean Winters)是New Relic都柏林办事处的技术支持工程师。当他不帮助客户利用新Relic的力量时,他会尽一切努力赢得他的梦幻足球联赛冠军。查看贴子

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们发一份建议书!