Renamed namespaces and added deployment guide

This commit is contained in:
matthew.batten@intergen.co.nz 2017-04-21 12:28:21 +12:00
Родитель 615e0eab39
Коммит dd124938a7
100 изменённых файлов: 273 добавлений и 154 удалений

Просмотреть файл

@ -1,4 +1,8 @@
Document DB
======
See the hands-on lab [here](hands-on-lab.md)
See the hands-on lab [here](hands-on-lab.md)
## Deployment
Before you can run the lab you will need to go through the [deployment guide](./deployment/readme.md)

Просмотреть файл

@ -0,0 +1,55 @@
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"databaseAccountName": {
"type": "string",
"metadata": {
"description": "The DocumentDB database account name."
}
}
},
"variables": {
"offerType": "Standard"
},
"resources": [
{
"apiVersion": "2015-04-08",
"type": "Microsoft.DocumentDB/databaseAccounts",
"name": "[parameters('databaseAccountName')]",
"location": "[resourceGroup().location]",
"properties": {
"name": "[parameters('databaseAccountName')]",
"databaseAccountOfferType": "[variables('offerType')]",
"locations": [
{
"locationName": "West US",
"failoverPriority": 0
},
{
"locationName": "Central US",
"failoverPriority": 1
},
{
"locationName": "North Europe",
"failoverPriority": 2
},
{
"locationName": "Southeast Asia",
"failoverPriority": 3
}
]
}
}
],
"outputs": {
"DocumentDBEndPoint": {
"type": "string",
"value": "[reference(concat('Microsoft.DocumentDB/databaseAccounts/', parameters('databaseAccountName'))).documentEndpoint]"
},
"DocumentDBKey": {
"type": "string",
"value": "[listKeys(resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName')), '2015-11-06').primaryMasterKey]"
}
}
}

Двоичные данные
Labs/DocumentDB/deployment/images/azure_deploy.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 38 KiB

Двоичные данные
Labs/DocumentDB/deployment/images/azure_deploy_output.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.9 KiB

Двоичные данные
Labs/DocumentDB/deployment/images/twitter_access_token.PNG Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 14 KiB

Двоичные данные
Labs/DocumentDB/deployment/images/twitter_app_details.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 42 KiB

Двоичные данные
Labs/DocumentDB/deployment/images/twitter_keys.PNG Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

Двоичные данные
Labs/DocumentDB/deployment/images/twitter_new_app.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 4.4 KiB

Просмотреть файл

@ -0,0 +1,120 @@
# Deployment Guide for DocumentDB Lab
## Azure Resources
To deploy the azure resouces needed for this lab, click the button below
![https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FMicrosoft%2Fcode-challenges%2Fmaster%2FLabs%2FDocumentDB%2FDeployment%2Fazuredeploy.json](http://azuredeploy.net/deploybutton.png)
Enter a resource group and a suitable (unique) name for your DocumentDB server. **This must be all lowercase** Set West US as the Location of the resource group.
![](./images/azure_deploy.png)
Click Purchase.
Once the deployment has finished save the DocumentDBKey and DocumentDBEndpoint from the output.
![](./images/azure_deploy_output.png)
## Seed Data
Open the Microsoft.CodeChallenges.DocumentDB.TweetSeed project found in the utilities directory.
Open the`app.config` and add the key and endpoint values from the output shown earlier.
e.g. (The key has been destroyed)
```XML
<add key="DocumentDB:Endpoint" value="https://docdbjoeblogslab.documents.azure.com:443/" />
<add key="DocumentDB:Key" value="uEEjfHPeUog9uYsLz3xL57ua93L7fuxkre9O9X0p65LhTJoGFUDywnbtLk9PWxPiFOadP49XMrs3lNDZcBFlwA" />
```
We need to add our twitter credentials so we can search/stream tweets from twitter.
Navigate to (https://apps.twitter.com/)[https://apps.twitter.com/] and Login with your user account. Once you are at the home page, click the Create New App button.
![](./images/twitter_new_app.png)
Fill out the basic information
e.g.
![](./images/twitter_app_details.png)
Click on `Create your Twitter application`
Navigate to 'Keys and Access Tokens'
![](./images/twitter_keys.png)
Copy the Consumer Key (API Key) and Consumer Secret (API Secret) to the`app.config`.
e.g. (The keys in this example have been destroyed)
```XML
<add key="Twitter:ConsumerKey" value="DUzBFBfqr1RQGGFH3BWlbtt1n" />
<add key="Twitter:ConsumerSecret" value="pEzdV7ksFxSDmxhK344uu97Ey5eW8uiDDn8nlrCBNQS9NjoY3M" />
```
Navigate down the page and click 'Create my Access Token'
Copy the Access Token and Access Token Secret to the`app.config`
![](./images/twitter_access_token.png)
e.g. (The keys in this example have been destroyed)
```XML
<add key="Twitter:AccessToken" value="349776177-TNxIlTJLXJKWkEm6i5PsRyLesBIJi6Px6UyBmKEU" />
<add key="Twitter:AccessTokenSecret" value="bmwuB4HuSWSutrGK7xYyqjefXO0GBWIQDCZqmsKEo4AZE" />
```
There are two ways to seed data in your DocumentDB, you can either search for tags or use a live stream of tweets that are using the hashtags that are specified in the`app.config`.
Firstly add the tags that you want to use in the`app.config` by comma seperating some hash tags
e.g.
```XML
<add key="Twitter:Tags" value="#MSBuild,#DocumentDb,#Azure"/>
```
Open `Program.cs`
You will see this snippet of code
```csharp
TwitterLiveStream(credentials, tags);
//TwitterSearch(credentials, tags);
```
If you want to use a live stream of data to seed your data, then leave it as it is.
If you want execute a search of past tweets (will seed your DocumentDB faster) then swap the commented out line so that it looks like this.
```csharp
//TwitterLiveStream(credentials, tags);
TwitterSearch(credentials, tags);
```
Run the application and you will see it seeding your DocumentDB database!
(Note if you are seeding from the live stream then you will have to manually close the application)
## Configure the lab
Open the Microsoft.CodeChallenges.DocumentDB.Lab.sln in /src/Microsoft.CodeChallenges.DocumentDB.Lab and open `web.config`
Copy and paste all the DocumentDB:: settings from the Seed Project to this web.config
```XML
<add key="DocumentDB:Endpoint" value="https://docdbjoeblogslab.documents.azure.com:443/" />
<add key="DocumentDB:Key" value="uEEjfHPeUog9uYsLz3xL57ua93L7fuxkre9O9X0p65LhTJoGFUDywnbtLk9PWxPiFOadP49XMrs3lNDZcBFlwA" />
<add key="DocumentDB:DatabaseName" value="tweets" />
<add key="DocumentDB:CollectionName" value="build" />
```
Go through the [code challenge](../hands-on-lab.md)

Просмотреть файл

@ -1,9 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
# Visual Studio 15
VisualStudioVersion = 15.0.26403.7
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LabWeb", "LabWeb\LabWeb.csproj", "{E18A7397-1BBF-4060-856E-1A72307CDDEA}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeChallenges.DocumentDB.Lab", "Microsoft.CodeChallenges.DocumentDB.Lab\Microsoft.CodeChallenges.DocumentDB.Lab.csproj", "{E18A7397-1BBF-4060-856E-1A72307CDDEA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 9.9 KiB

После

Ширина:  |  Высота:  |  Размер: 9.9 KiB

Просмотреть файл

@ -4,13 +4,13 @@ using System.Configuration;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Web.Mvc;
using LabWeb.Models;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Microsoft.CodeChallenges.DocumentDB.Lab.Models;
using Newtonsoft.Json;
namespace LabWeb.Controllers
namespace Microsoft.CodeChallenges.DocumentDB.Lab.Controllers
{
public class HomeController : Controller
{
@ -88,9 +88,7 @@ namespace LabWeb.Controllers
};
var numRetries = 0;
var collectionUri = GetDocumentCollectionUri();
var client = await GetReadOnlyClient(locationName);
var docQuery = client.CreateDocumentQuery(collectionUri, query, _feedOptions).AsDocumentQuery();
IDocumentQuery<dynamic> docQuery = null;
if (docQuery != null)
{

Просмотреть файл

@ -3,7 +3,7 @@ using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace LabWeb
namespace Microsoft.CodeChallenges.DocumentDB.Lab
{
public class MvcApplication : HttpApplication
{

Просмотреть файл

@ -13,8 +13,8 @@
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LabWeb</RootNamespace>
<AssemblyName>LabWeb</AssemblyName>
<RootNamespace>Microsoft.CodeChallenges.DocumentDB.Lab</RootNamespace>
<AssemblyName>Microsoft.CodeChallenges.DocumentDB.Lab</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<UseIISExpress>true</UseIISExpress>

Просмотреть файл

@ -1,4 +1,4 @@
namespace LabWeb.Models
namespace Microsoft.CodeChallenges.DocumentDB.Lab.Models
{
public class HomeViewModel
{

Просмотреть файл

@ -1,11 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LabWeb.Models
namespace Microsoft.CodeChallenges.DocumentDB.Lab.Models
{
public class QueryModel
{

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 1.7 KiB

После

Ширина:  |  Высота:  |  Размер: 1.7 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 564 B

После

Ширина:  |  Высота:  |  Размер: 564 B

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.0 KiB

После

Ширина:  |  Высота:  |  Размер: 2.0 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.2 KiB

После

Ширина:  |  Высота:  |  Размер: 2.2 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 2.2 KiB

После

Ширина:  |  Высота:  |  Размер: 2.2 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 307 B

После

Ширина:  |  Высота:  |  Размер: 307 B

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 109 B

После

Ширина:  |  Высота:  |  Размер: 109 B

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 290 B

После

Ширина:  |  Высота:  |  Размер: 290 B

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 305 B

После

Ширина:  |  Высота:  |  Размер: 305 B

Просмотреть файл

@ -9,10 +9,11 @@
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="DocumentDB:Endpoint" value="https://planet-scale-tweets.documents.azure.com:443/" />
<add key="DocumentDB:Key" value="oIjI3W3AOUyBtdot75ZPDuPiJ3sCJO4hpVFD8pmBIEZoDN1d18pKXHDqUJPtEe18RA2CN0kVPghLVD5rsNNi5w==" />
<add key="DocumentDB:Endpoint" value="" />
<add key="DocumentDB:Key" value="" />
<add key="DocumentDB:DatabaseName" value="tweets" />
<add key="DocumentDB:CollectionName" value="Buildv2" />
<add key="DocumentDB:CollectionName" value="build" />
</appSettings>
<connectionStrings />
<system.web>

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 31 KiB

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Просмотреть файл

До

Ширина:  |  Высота:  |  Размер: 106 KiB

После

Ширина:  |  Высота:  |  Размер: 106 KiB

Просмотреть файл

@ -1,39 +0,0 @@
var client = await GetReadOnlyClient(locationName);
IDocumentQuery<dynamic> docQuery = client.CreateDocumentQuery(collectionUri, query, _feedOptions).AsDocumentQuery();
SELECT *
FROM tweet
SELECT *
FROM twitter
SELECT CreatedBy
FROM tweets
SELCT tweets.CreatedBy
FROM tweets
SELECT *
FROM tweets
WHERE tweets.CreatedBy.Name = "Matthew Batten"
SELECT *
FROM hashtags IN tweets.Hashtags
SELECT *
FROM hashtags IN tweets.Hashtags
WHERE hashtags.text != "Trump"
SELECT tweets.CreatedBy.Name,
tweets.FullText
FROM tweet
Little map of locations and animation
Show javascipt function and use it in a query.
Create a deployment markdown.
#Build2017

Просмотреть файл

@ -1,48 +0,0 @@
using System;
using System.Threading.Tasks;
using Microsoft.Azure;
using Tweetinvi;
using Tweetinvi.Models;
namespace DocDb.Tweets
{
class Program
{
private static DocumentDbService _docDbService;
private static void Main()
{
Task.WaitAll(Task.Run(async () =>
{
var credentials = new TwitterCredentials(CloudConfigurationManager.GetSetting("Twitter:ConsumerKey"),
CloudConfigurationManager.GetSetting("Twitter:ConsumerSecret"),
CloudConfigurationManager.GetSetting("Twitter:AccessToken"),
CloudConfigurationManager.GetSetting("Twitter:AccessTokenSecret"));
_docDbService = new DocumentDbService();
await _docDbService.Initalise();
var stream = Stream.CreateFilteredStream(credentials);
foreach (var tag in CloudConfigurationManager.GetSetting("Twitter:Tags").Split(','))
{
stream.AddTrack(tag, async (tweet) =>
{
try
{
await _docDbService.UploadDocument(tweet);
Console.WriteLine(tweet.FullText);
}
catch
{
//Ignore
}
});
}
stream.StartStreamMatchingAllConditions();
}));
}
}
}

Просмотреть файл

@ -1,9 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26403.7
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DocDb.Tweets", "DocDb.Tweets\DocDb.Tweets.csproj", "{1B287D58-0805-481E-85C6-85E6A109D1D2}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.CodeChallenges.DocumentDB.TweetSeed", "Microsoft.CodeChallenges.DocumentDB.TweetSeed\Microsoft.CodeChallenges.DocumentDB.TweetSeed.csproj", "{1B287D58-0805-481E-85C6-85E6A109D1D2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

Просмотреть файл

@ -7,7 +7,7 @@
<add key="DocumentDB:Endpoint" value="" />
<add key="DocumentDB:Key" value="" />
<add key="DocumentDB:DatabaseName" value="tweets" />
<add key="DocumentDB:CollectionName" value="Build" />
<add key="DocumentDB:CollectionName" value="build" />
<add key="Twitter:ConsumerKey" value="" />
<add key="Twitter:ConsumerSecret" value="" />

Просмотреть файл

@ -4,7 +4,7 @@ using Microsoft.Azure;
using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
namespace DocDb.Tweets
namespace Microsoft.CodeChallenges.DocumentDB.TweetSeed
{
public class DocumentDbService
{

Просмотреть файл

@ -6,8 +6,8 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{1B287D58-0805-481E-85C6-85E6A109D1D2}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>DocDb.Tweets</RootNamespace>
<AssemblyName>DocDb.Tweets</AssemblyName>
<RootNamespace>Microsoft.CodeChallenges.DocumentDB.TweetSeed</RootNamespace>
<AssemblyName>Microsoft.CodeChallenges.DocumentDB.TweetSeed</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

Просмотреть файл

@ -0,0 +1,69 @@
using System;
using System.Threading.Tasks;
using Microsoft.Azure;
using Tweetinvi;
using Tweetinvi.Models;
namespace Microsoft.CodeChallenges.DocumentDB.TweetSeed
{
class Program
{
private static DocumentDbService _docDbService;
private static void Main()
{
Task.WaitAll(Task.Run(async () =>
{
var credentials = new TwitterCredentials(CloudConfigurationManager.GetSetting("Twitter:ConsumerKey"),
CloudConfigurationManager.GetSetting("Twitter:ConsumerSecret"),
CloudConfigurationManager.GetSetting("Twitter:AccessToken"),
CloudConfigurationManager.GetSetting("Twitter:AccessTokenSecret"));
_docDbService = new DocumentDbService();
await _docDbService.Initalise();
var tags = CloudConfigurationManager.GetSetting("Twitter:Tags").Split(',');
TwitterLiveStream(credentials, tags);
//TwitterSearch(credentials, tags);
}));
}
private static void TwitterSearch(TwitterCredentials credentials, string[] tags)
{
Auth.SetCredentials(credentials);
foreach (var tag in tags)
{
foreach (var tweet in Search.SearchTweets(tag))
{
_docDbService.UploadDocument(tweet).ConfigureAwait(false);
Console.WriteLine(tweet.FullText);
}
}
}
private static void TwitterLiveStream(TwitterCredentials credentials, string[] tags)
{
var stream = Stream.CreateFilteredStream(credentials);
foreach (var tag in tags)
{
stream.AddTrack(tag, async (tweet) =>
{
try
{
await _docDbService.UploadDocument(tweet);
Console.WriteLine(tweet.FullText);
}
catch
{
//Ignore
}
});
}
stream.StartStreamMatchingAllConditions();
}
}
}

Просмотреть файл

@ -1,33 +0,0 @@
BUILD Hands-on-labs 2017 (Code challenge lab)
=============================================
Client kick-off meeting notes
-----------------------------
Liam Cavanagh - Azure Search
15 minute lab
Stick to Visual Studio (dev audience)
Azure Search
------------
Same as 2016 lab (which has been copied into code challenges repo)
Extra features / Changes
- change auto complete to term suggestion rather than document suggestion
- demonstrate synomns functionality by creating a dictionary of words we can use to suggest other terms and highlight these in our results.
Document DB
-----------
Same as 2016 lab (which has been copied into code challenges repo)
Extra features / Changes
- Add Latency record - display how long query took.
- Send some warm up queries when the application loads to reduce the latency time recorder
- Add region selector
- Add webjob to use twitter streaming api to gather tweets about build *need to agree on hashtag* and save them to DocumentDb

Просмотреть файл

@ -4,8 +4,4 @@
Please put individual labs into the Labs directory with an appropriate name.
e.g. Labs/Azure Search
Any notes about the labs should be placed in the Project Definitions directory.
e.g. Project Definitions/BUILD Hands-on-labs 2017.md
e.g. Labs/Azure Search