{"action":"created","comment":{"url":"https://api.github.com/repos/upday/upday.github.io/pulls/comments/93916423","pull_request_review_id":14444808,"id":93916423,"diff_hunk":"@@ -0,0 +1,134 @@\n+---\n+layout: post\n+title: \"A journey towards a custom data warehouse solution Part 1 : Getting Started\"\n+description:\n+modified:\n+categories: blog\n+author: tino_noack\n+excerpt: This is part one of a series of articles in which we would like to share our journey with you and our experiences towards a custom data warehouse solution. Part one starts with a brief introduction to upday including the kinds of data we work with and a description of our working environment. Furthermore, we come up with a tentative definition of a data warehouse (DWH), describe components regarding our use case, and identify tools which can be applied for implementation. Finally, we introduce a data lake as a more 'Big-Data-friendly' but provisional solution.\n+tags: [Data, DWH, Data Warehouse, Big Data, Data Platform, Data Lake]\n+image:\n+date: 2016-12-22T00:00:00-04:00\n+---\n+# Abstract\n+\n+This is part one of a series of articles in which we would like to share our journey with you and our experiences towards a custom data warehouse solution. Part one starts with a\n+brief introduction to upday including the kinds of data we work with and a description of our working environment. Furthermore, we come up with a tentative definition of a data\n+warehouse (DWH), describe components regarding our use case, and identify tools which can be applied for implementation. Finally, we introduce a data lake as a more\n+'Big-Data-friendly' but provisional solution.\n+\n+# Getting Started\n+\n+upday is a news app which aggregates content from thousands of sources including trusted brands and bloggers into a unique and simple format. It is available in a variety of\n+European countries in a wide range of languages. upday is designed to be an intelligent news aggregator which learns about the reading habits and preferences of each unique user.\n+For that reason, we have to cope with a huge volume of incoming data from a vast number of sources. For example, we handle the following kinds of data:\n+\n+1. _Content metadata_ such as information about the content type, the publisher, and the publishing date is amongst others used for maintaining the publisher relationship. Content\n+   metadata is semi-structured but also contains unstructured data such as a title, a description, and the content itself e.g. in text form.\n+2. _User preferences_ are reading interests explicitly selected by the user and are used to personalize the content we deliver to the user. User preferences data is a form of\n+   structured data.\n+3. _User behavior_ includes information about the content consumed by the user and is used to improve the users’ experience with our product for example by means of collaborative\n+   filtering. User behavior data is also a form of structured data.\n+\n+upday itself is a startup and a dynamic working environment with an agile development process. We use cloud services in order to avoid the commitment and costs of purchasing\n+hardware products. This enables very fast development, allows us to perform cost efficient short-term experiments, and to pivot directions quickly.\n+\n+## DWH – a tentative definition\n+\n+Every beginning is hard, and we certainly did not know where to start. Thus, we asked ourselves; What is a _data warehouse (DWH)_? We decided to start with the first use case we\n+could already see ahead of us. As stated by Inmon: “_A data warehouse is a subject-oriented, integrated, nonvolatile and time-variant collection of data in support of management's\n+decisions._” [^1]. A more natural definition is provided by Kimball: “_A data warehouse is a copy of transaction data specifically structured for querying and reporting._” [^2].\n+However, these definitions are still very abstract and did not help us a lot to understand what exactly to start with. In our minds, and from a historical point of view\n+approximately 5 - 15 years ago, the domain of data warehousing was marked by products from big companies like Oracle, IBM, or Microsoft. Usually a product provided by one of these\n+vendors was installed on an expensive server farm. This infrastructure was then used to create a multidimensional data cube which was continuously and automatically processed\n+overnight. This was generally very expensive, highly inflexible, and lead to a strong product-customer dependency. It is easy to assume that it is complicated to change such a\n+production-ready DWH solution after it is been established. We were wary of getting caught in a situation like that. But as we know, information technology is a vibrant area and\n+rapidly changing. In recent years, the possibilities for data warehouses and even data management platforms have changed dramatically. Since we were not familiar with\n+state-of-the-art techniques and best practices of building a DWH, the amount of possible products and solutions was overwhelming. Therefore, we decided to engage a consultant\n+with domain expertise to guide us the first steps.\n+\n+## Basic components\n+\n+In collaboration with the consultant, we identified basic components of a DWH for our use case: _sources_, _staging area_, _DWH core_, and _data mart_. The points and diagram below\n+describe these components:\n+\n+1. Sources: We already introduced three kinds of data in the first section but we did not mention the data sources. The content metadata, in agreement with the content publisher,\n+   is usually directly extracted from the publisher's source and stored into Elasticsearch. Data about user preferences is provided by our own in-app service and stored into a\n+   PostgreSQL database. User behavior data is both collected by our own in-app service and by a third party service. User behavior data is then stored into an S3 bucket.\n+2. Staging area_: The staging area is the first destination of all the data. It contains data which was extracted from the sources and might be incomplete and unadjusted. This\n+   location can be used for data cleansing and transformation.\n+3. DWH core: It is planned to load the cleaned and transformed data into the DWH core. The DWH core is intended to contain the entire data for general purpose analysis. This\n+   contrasts the previous definitions which describe a DWH as subject-oriented. We wanted to keep that door open because analysis purposes were not clearly defined at that stage\n+   and keeping the platform flexible was important to support comprehensive analysis by data scientists and data mining experts.\n+4. Data mart: For our use case, the data mart is the business layer which is subject-oriented and optimized for analysis purposes. The data is loaded from the DWH core via a\n+   separated ETL process and contains aggregated information which can be queried by business analysts.\n+\n+<center>\n+<picture>\n+  \t<a href=\"/images/blog/dwh_journey/dwh_components.png\"><img src=\"/images/blog/dwh_journey/dwh_components.png\" alt=\"DWH components\" width=\"850\"></a>\n+   \t<figcaption>Figure 1: DWH components</figcaption>\n+</picture>\n+</center>\n+\n+\n+## Processing steps and tools\n+\n+From the consultancy, we learned that a DWH can be implemented as a flexible process chain which is applied to collect data from different sources. The collected data is then\n+stored in a central location and used to generate reports, create insights, and support business decision-making. We identified the following process steps: _extract, transform\n+and load (ETL)_, _scheduling_, _monitoring_, _storage_, and _reporting_. As briefly described below, each of these processing steps can be covered by a variety of tools:\n+\n+* The ETL process is one of the most important processing steps of the DWH. It is applied to extract, transform, and load data from various sources\n+  into the staging area. Available ETL tools are: Talend, Etleap, Alteryx, Pentaho, and AWS Lambda.\n+* Scheduling is used to trigger specific actions time-controlled. For example, it is useful to execute long running and complex calculations overnight and not during the main\n+  business hours. Another example is consecutive actions where one action waits for the successful termination of another. Some scheduling tools are: Jenkins, Talend Enterprise,\n+  and SOS-Scheduler.\n+* Monitoring is required to be informed about the condition of the DWH and the states of individual actions. It is crucial to be alerted automatically in case of problems.\n+  Possible monitoring tools we identified are: Splunk or DataDog.\n+* Storage is mandatory for a data processing where the data is persistently accommodated. Some available storage tools are: Redshift, Snowflake, PostgreSQL, and Cassandra.\n+* Finally, reporting is the purpose of a DWH where, based on the data held in the DWH, business cases are summarized and visualized.\n+\n+## Data Lake – why would we need one?\n+\n+We have already gained more than 6 million monthly unique users and it seems that this number will keep growing. Thus, our data management process is clearly within the realm\n+of Big Data. However, relational database systems are usually not well-suited to handle semi-structured and unstructured data as we have to deal with. Consequently, we also\n+discussed a more 'Big-Data-friendly' solution which is known as a data lake [^3]. Stein and Morriso describe a data lake as follows: \"_A repository for large quantities and\n+varieties of data, both structured and unstructured._\" [^4]. Based on this definition, a data lake solution could meet our needs perfectly. We have looked at this topic more\n+closely, conducted further research, and defined the following components of a data lake: _sources_, _data repository_, and _interactive query service_. The points and diagram\n+below describe these components.\n+\n+1. Sources: As described earlier, we have to deal with structured, semi-structured, and unstructured data.\n+2. Data Repository: This is used to store the data heterogeneously. It preserves the original data fidelity extracted from the sources and the lineage of data transformation.\n+3. Interactive Query Service: This is a service which accesses the data repository and transforms the data into a format that can be consumed by data science, data mining, and\n+   business intelligence experts. The interactive query service can be a transformation rule which defines how to transform the data. This transformation rule might be used to\n+   store the results persistently into the data repository or into another data base. It can be also used for exploring the raw data.\n+\n+<center>\n+<picture>\n+    <a href=\"/images/blog/dwh_journey/query_service.png\"><img src=\"/images/blog/dwh_journey/query_service.png\" alt=\"Components of a data lake\" width=\"850\"></a>\n+    <figcaption>Figure 2: Components of a data lake</figcaption>\n+</picture>\n+</center>\n+\n+\n+## Adaption of processing steps\n+\n+The data processing steps are similar to those described in the process chain above and are still valid regarding the data lake approach. In our use case, we adapt the\n+process chain in two main ways: storage and interactive query service.\n+\n+* Storage: For this use case, S3 and HDFS are appropriate storage solutions.","path":"_posts/blog/2016-12-22-dwh-part1_getting_started.md","position":118,"original_position":118,"commit_id":"7e87b602302140720b5c2594faa02ee1c3ace86e","original_commit_id":"7e87b602302140720b5c2594faa02ee1c3ace86e","user":{"login":"florina-muntenescu","id":2998890,"avatar_url":"https://avatars.githubusercontent.com/u/2998890?v=3","gravatar_id":"","url":"https://api.github.com/users/florina-muntenescu","html_url":"https://github.com/florina-muntenescu","followers_url":"https://api.github.com/users/florina-muntenescu/followers","following_url":"https://api.github.com/users/florina-muntenescu/following{/other_user}","gists_url":"https://api.github.com/users/florina-muntenescu/gists{/gist_id}","starred_url":"https://api.github.com/users/florina-muntenescu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/florina-muntenescu/subscriptions","organizations_url":"https://api.github.com/users/florina-muntenescu/orgs","repos_url":"https://api.github.com/users/florina-muntenescu/repos","events_url":"https://api.github.com/users/florina-muntenescu/events{/privacy}","received_events_url":"https://api.github.com/users/florina-muntenescu/received_events","type":"User","site_admin":false},"body":"bold storage and Interactive Query Service","created_at":"2016-12-27T10:13:52Z","updated_at":"2016-12-27T10:37:03Z","html_url":"https://github.com/upday/upday.github.io/pull/42#discussion_r93916423","pull_request_url":"https://api.github.com/repos/upday/upday.github.io/pulls/42","_links":{"self":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/comments/93916423"},"html":{"href":"https://github.com/upday/upday.github.io/pull/42#discussion_r93916423"},"pull_request":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/42"}}},"pull_request":{"url":"https://api.github.com/repos/upday/upday.github.io/pulls/42","id":99106073,"html_url":"https://github.com/upday/upday.github.io/pull/42","diff_url":"https://github.com/upday/upday.github.io/pull/42.diff","patch_url":"https://github.com/upday/upday.github.io/pull/42.patch","issue_url":"https://api.github.com/repos/upday/upday.github.io/issues/42","number":42,"state":"open","locked":false,"title":"added blog post dwh part 1","user":{"login":"noacktino","id":13030569,"avatar_url":"https://avatars.githubusercontent.com/u/13030569?v=3","gravatar_id":"","url":"https://api.github.com/users/noacktino","html_url":"https://github.com/noacktino","followers_url":"https://api.github.com/users/noacktino/followers","following_url":"https://api.github.com/users/noacktino/following{/other_user}","gists_url":"https://api.github.com/users/noacktino/gists{/gist_id}","starred_url":"https://api.github.com/users/noacktino/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/noacktino/subscriptions","organizations_url":"https://api.github.com/users/noacktino/orgs","repos_url":"https://api.github.com/users/noacktino/repos","events_url":"https://api.github.com/users/noacktino/events{/privacy}","received_events_url":"https://api.github.com/users/noacktino/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-12-22T13:42:01Z","updated_at":"2016-12-27T10:37:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4c513df1d7d11b05715637b57cc36d2d667ea59b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/upday/upday.github.io/pulls/42/commits","review_comments_url":"https://api.github.com/repos/upday/upday.github.io/pulls/42/comments","review_comment_url":"https://api.github.com/repos/upday/upday.github.io/pulls/comments{/number}","comments_url":"https://api.github.com/repos/upday/upday.github.io/issues/42/comments","statuses_url":"https://api.github.com/repos/upday/upday.github.io/statuses/7e87b602302140720b5c2594faa02ee1c3ace86e","head":{"label":"upday:dwhPartOne","ref":"dwhPartOne","sha":"7e87b602302140720b5c2594faa02ee1c3ace86e","user":{"login":"upday","id":16613366,"avatar_url":"https://avatars.githubusercontent.com/u/16613366?v=3","gravatar_id":"","url":"https://api.github.com/users/upday","html_url":"https://github.com/upday","followers_url":"https://api.github.com/users/upday/followers","following_url":"https://api.github.com/users/upday/following{/other_user}","gists_url":"https://api.github.com/users/upday/gists{/gist_id}","starred_url":"https://api.github.com/users/upday/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/upday/subscriptions","organizations_url":"https://api.github.com/users/upday/orgs","repos_url":"https://api.github.com/users/upday/repos","events_url":"https://api.github.com/users/upday/events{/privacy}","received_events_url":"https://api.github.com/users/upday/received_events","type":"Organization","site_admin":false},"repo":{"id":53958722,"name":"upday.github.io","full_name":"upday/upday.github.io","owner":{"login":"upday","id":16613366,"avatar_url":"https://avatars.githubusercontent.com/u/16613366?v=3","gravatar_id":"","url":"https://api.github.com/users/upday","html_url":"https://github.com/upday","followers_url":"https://api.github.com/users/upday/followers","following_url":"https://api.github.com/users/upday/following{/other_user}","gists_url":"https://api.github.com/users/upday/gists{/gist_id}","starred_url":"https://api.github.com/users/upday/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/upday/subscriptions","organizations_url":"https://api.github.com/users/upday/orgs","repos_url":"https://api.github.com/users/upday/repos","events_url":"https://api.github.com/users/upday/events{/privacy}","received_events_url":"https://api.github.com/users/upday/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/upday/upday.github.io","description":null,"fork":false,"url":"https://api.github.com/repos/upday/upday.github.io","forks_url":"https://api.github.com/repos/upday/upday.github.io/forks","keys_url":"https://api.github.com/repos/upday/upday.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/upday/upday.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/upday/upday.github.io/teams","hooks_url":"https://api.github.com/repos/upday/upday.github.io/hooks","issue_events_url":"https://api.github.com/repos/upday/upday.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/upday/upday.github.io/events","assignees_url":"https://api.github.com/repos/upday/upday.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/upday/upday.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/upday/upday.github.io/tags","blobs_url":"https://api.github.com/repos/upday/upday.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/upday/upday.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/upday/upday.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/upday/upday.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/upday/upday.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/upday/upday.github.io/languages","stargazers_url":"https://api.github.com/repos/upday/upday.github.io/stargazers","contributors_url":"https://api.github.com/repos/upday/upday.github.io/contributors","subscribers_url":"https://api.github.com/repos/upday/upday.github.io/subscribers","subscription_url":"https://api.github.com/repos/upday/upday.github.io/subscription","commits_url":"https://api.github.com/repos/upday/upday.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/upday/upday.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/upday/upday.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/upday/upday.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/upday/upday.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/upday/upday.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/upday/upday.github.io/merges","archive_url":"https://api.github.com/repos/upday/upday.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/upday/upday.github.io/downloads","issues_url":"https://api.github.com/repos/upday/upday.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/upday/upday.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/upday/upday.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/upday/upday.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/upday/upday.github.io/labels{/name}","releases_url":"https://api.github.com/repos/upday/upday.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/upday/upday.github.io/deployments","created_at":"2016-03-15T16:02:24Z","updated_at":"2016-11-05T13:45:25Z","pushed_at":"2016-12-22T13:45:51Z","git_url":"git://github.com/upday/upday.github.io.git","ssh_url":"git@github.com:upday/upday.github.io.git","clone_url":"https://github.com/upday/upday.github.io.git","svn_url":"https://github.com/upday/upday.github.io","homepage":null,"size":28602,"stargazers_count":5,"watchers_count":5,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":5,"default_branch":"master"}},"base":{"label":"upday:master","ref":"master","sha":"be544969aa09dd24ae2cbaa0ce1ea8fc2cfca00e","user":{"login":"upday","id":16613366,"avatar_url":"https://avatars.githubusercontent.com/u/16613366?v=3","gravatar_id":"","url":"https://api.github.com/users/upday","html_url":"https://github.com/upday","followers_url":"https://api.github.com/users/upday/followers","following_url":"https://api.github.com/users/upday/following{/other_user}","gists_url":"https://api.github.com/users/upday/gists{/gist_id}","starred_url":"https://api.github.com/users/upday/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/upday/subscriptions","organizations_url":"https://api.github.com/users/upday/orgs","repos_url":"https://api.github.com/users/upday/repos","events_url":"https://api.github.com/users/upday/events{/privacy}","received_events_url":"https://api.github.com/users/upday/received_events","type":"Organization","site_admin":false},"repo":{"id":53958722,"name":"upday.github.io","full_name":"upday/upday.github.io","owner":{"login":"upday","id":16613366,"avatar_url":"https://avatars.githubusercontent.com/u/16613366?v=3","gravatar_id":"","url":"https://api.github.com/users/upday","html_url":"https://github.com/upday","followers_url":"https://api.github.com/users/upday/followers","following_url":"https://api.github.com/users/upday/following{/other_user}","gists_url":"https://api.github.com/users/upday/gists{/gist_id}","starred_url":"https://api.github.com/users/upday/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/upday/subscriptions","organizations_url":"https://api.github.com/users/upday/orgs","repos_url":"https://api.github.com/users/upday/repos","events_url":"https://api.github.com/users/upday/events{/privacy}","received_events_url":"https://api.github.com/users/upday/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/upday/upday.github.io","description":null,"fork":false,"url":"https://api.github.com/repos/upday/upday.github.io","forks_url":"https://api.github.com/repos/upday/upday.github.io/forks","keys_url":"https://api.github.com/repos/upday/upday.github.io/keys{/key_id}","collaborators_url":"https://api.github.com/repos/upday/upday.github.io/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/upday/upday.github.io/teams","hooks_url":"https://api.github.com/repos/upday/upday.github.io/hooks","issue_events_url":"https://api.github.com/repos/upday/upday.github.io/issues/events{/number}","events_url":"https://api.github.com/repos/upday/upday.github.io/events","assignees_url":"https://api.github.com/repos/upday/upday.github.io/assignees{/user}","branches_url":"https://api.github.com/repos/upday/upday.github.io/branches{/branch}","tags_url":"https://api.github.com/repos/upday/upday.github.io/tags","blobs_url":"https://api.github.com/repos/upday/upday.github.io/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/upday/upday.github.io/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/upday/upday.github.io/git/refs{/sha}","trees_url":"https://api.github.com/repos/upday/upday.github.io/git/trees{/sha}","statuses_url":"https://api.github.com/repos/upday/upday.github.io/statuses/{sha}","languages_url":"https://api.github.com/repos/upday/upday.github.io/languages","stargazers_url":"https://api.github.com/repos/upday/upday.github.io/stargazers","contributors_url":"https://api.github.com/repos/upday/upday.github.io/contributors","subscribers_url":"https://api.github.com/repos/upday/upday.github.io/subscribers","subscription_url":"https://api.github.com/repos/upday/upday.github.io/subscription","commits_url":"https://api.github.com/repos/upday/upday.github.io/commits{/sha}","git_commits_url":"https://api.github.com/repos/upday/upday.github.io/git/commits{/sha}","comments_url":"https://api.github.com/repos/upday/upday.github.io/comments{/number}","issue_comment_url":"https://api.github.com/repos/upday/upday.github.io/issues/comments{/number}","contents_url":"https://api.github.com/repos/upday/upday.github.io/contents/{+path}","compare_url":"https://api.github.com/repos/upday/upday.github.io/compare/{base}...{head}","merges_url":"https://api.github.com/repos/upday/upday.github.io/merges","archive_url":"https://api.github.com/repos/upday/upday.github.io/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/upday/upday.github.io/downloads","issues_url":"https://api.github.com/repos/upday/upday.github.io/issues{/number}","pulls_url":"https://api.github.com/repos/upday/upday.github.io/pulls{/number}","milestones_url":"https://api.github.com/repos/upday/upday.github.io/milestones{/number}","notifications_url":"https://api.github.com/repos/upday/upday.github.io/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/upday/upday.github.io/labels{/name}","releases_url":"https://api.github.com/repos/upday/upday.github.io/releases{/id}","deployments_url":"https://api.github.com/repos/upday/upday.github.io/deployments","created_at":"2016-03-15T16:02:24Z","updated_at":"2016-11-05T13:45:25Z","pushed_at":"2016-12-22T13:45:51Z","git_url":"git://github.com/upday/upday.github.io.git","ssh_url":"git@github.com:upday/upday.github.io.git","clone_url":"https://github.com/upday/upday.github.io.git","svn_url":"https://github.com/upday/upday.github.io","homepage":null,"size":28602,"stargazers_count":5,"watchers_count":5,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":5,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/42"},"html":{"href":"https://github.com/upday/upday.github.io/pull/42"},"issue":{"href":"https://api.github.com/repos/upday/upday.github.io/issues/42"},"comments":{"href":"https://api.github.com/repos/upday/upday.github.io/issues/42/comments"},"review_comments":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/42/comments"},"review_comment":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/upday/upday.github.io/pulls/42/commits"},"statuses":{"href":"https://api.github.com/repos/upday/upday.github.io/statuses/7e87b602302140720b5c2594faa02ee1c3ace86e"}}}}
{"actor":{"display_login":"florina-muntenescu"}}