Merge "Don't keep record of dead processes in top.*"
diff --git a/scouting/db/db.go b/scouting/db/db.go
index 1f182b1..3d514e3 100644
--- a/scouting/db/db.go
+++ b/scouting/db/db.go
@@ -13,7 +13,7 @@
 }
 
 type Match struct {
-	MatchNumber, Round     int32
+	MatchNumber, SetNumber int32
 	CompLevel              string
 	R1, R2, R3, B1, B2, B3 int32
 }
@@ -24,10 +24,10 @@
 }
 
 type Stats struct {
-	TeamNumber, MatchNumber, Round int32
-	CompLevel                      string
-	StartingQuadrant               int32
-	AutoBallPickedUp               [5]bool
+	TeamNumber, MatchNumber, SetNumber int32
+	CompLevel                          string
+	StartingQuadrant                   int32
+	AutoBallPickedUp                   [5]bool
 	// TODO(phil): Re-order auto and teleop fields so auto comes first.
 	ShotsMissed, UpperGoalShots, LowerGoalShots   int32
 	ShotsMissedAuto, UpperGoalAuto, LowerGoalAuto int32
@@ -39,7 +39,7 @@
 	// 3 -> "Low"
 	// 4 -> "Medium"
 	// 5 -> "High"
-	// 6 -> "Transversal"
+	// 6 -> "Traversal"
 	Climbing int32
 	// Some non-numerical data that the scout felt worth noting.
 	Comment string
@@ -74,7 +74,7 @@
 
 	statement, err := database.Prepare("CREATE TABLE IF NOT EXISTS matches (" +
 		"MatchNumber INTEGER, " +
-		"Round INTEGER, " +
+		"SetNumber INTEGER, " +
 		"CompLevel VARCHAR, " +
 		"R1 INTEGER, " +
 		"R2 INTEGER, " +
@@ -82,7 +82,7 @@
 		"B1 INTEGER, " +
 		"B2 INTEGER, " +
 		"B3 INTEGER, " +
-		"PRIMARY KEY (MatchNumber, Round, CompLevel))")
+		"PRIMARY KEY (MatchNumber, SetNumber, CompLevel))")
 	if err != nil {
 		database.Close()
 		return nil, errors.New(fmt.Sprint("Failed to prepare matches table creation: ", err))
@@ -119,7 +119,7 @@
 	statement, err = database.Prepare("CREATE TABLE IF NOT EXISTS team_match_stats (" +
 		"TeamNumber INTEGER, " +
 		"MatchNumber INTEGER, " +
-		"Round INTEGER, " +
+		"SetNumber INTEGER, " +
 		"CompLevel VARCHAR, " +
 		"StartingQuadrant INTEGER, " +
 		"AutoBall1PickedUp BOOLEAN, " +
@@ -138,7 +138,7 @@
 		"Climbing INTEGER, " +
 		"Comment VARCHAR, " +
 		"CollectedBy VARCHAR, " +
-		"PRIMARY KEY (TeamNumber, MatchNumber, Round, CompLevel))")
+		"PRIMARY KEY (TeamNumber, MatchNumber, SetNumber, CompLevel))")
 	if err != nil {
 		database.Close()
 		return nil, errors.New(fmt.Sprint("Failed to prepare stats table creation: ", err))
@@ -238,12 +238,12 @@
 // This function will also populate the Stats table with six empty rows every time a match is added
 func (database *Database) AddToMatch(m Match) error {
 	statement, err := database.Prepare("INSERT INTO matches(" +
-		"MatchNumber, Round, CompLevel, " +
+		"MatchNumber, SetNumber, CompLevel, " +
 		"R1, R2, R3, B1, B2, B3) " +
 		"VALUES (" +
 		"$1, $2, $3, " +
 		"$4, $5, $6, $7, $8, $9) " +
-		"ON CONFLICT (MatchNumber, Round, CompLevel) DO UPDATE SET " +
+		"ON CONFLICT (MatchNumber, SetNumber, CompLevel) DO UPDATE SET " +
 		"R1 = EXCLUDED.R1, R2 = EXCLUDED.R2, R3 = EXCLUDED.R3, " +
 		"B1 = EXCLUDED.B1, B2 = EXCLUDED.B2, B3 = EXCLUDED.B3")
 	if err != nil {
@@ -251,7 +251,7 @@
 	}
 	defer statement.Close()
 
-	_, err = statement.Exec(m.MatchNumber, m.Round, m.CompLevel,
+	_, err = statement.Exec(m.MatchNumber, m.SetNumber, m.CompLevel,
 		m.R1, m.R2, m.R3, m.B1, m.B2, m.B3)
 	if err != nil {
 		return errors.New(fmt.Sprint("Failed to insert into match database: ", err))
@@ -298,7 +298,7 @@
 	}
 
 	statement, err := database.Prepare("INSERT INTO team_match_stats(" +
-		"TeamNumber, MatchNumber, Round, CompLevel, " +
+		"TeamNumber, MatchNumber, SetNumber, CompLevel, " +
 		"StartingQuadrant, " +
 		"AutoBall1PickedUp, AutoBall2PickedUp, AutoBall3PickedUp, " +
 		"AutoBall4PickedUp, AutoBall5PickedUp, " +
@@ -321,7 +321,7 @@
 	defer statement.Close()
 
 	_, err = statement.Exec(
-		s.TeamNumber, s.MatchNumber, s.Round, s.CompLevel,
+		s.TeamNumber, s.MatchNumber, s.SetNumber, s.CompLevel,
 		s.StartingQuadrant,
 		s.AutoBallPickedUp[0], s.AutoBallPickedUp[1], s.AutoBallPickedUp[2],
 		s.AutoBallPickedUp[3], s.AutoBallPickedUp[4],
@@ -388,7 +388,7 @@
 	matches := make([]Match, 0)
 	for rows.Next() {
 		var match Match
-		err := rows.Scan(&match.MatchNumber, &match.Round, &match.CompLevel,
+		err := rows.Scan(&match.MatchNumber, &match.SetNumber, &match.CompLevel,
 			&match.R1, &match.R2, &match.R3, &match.B1, &match.B2, &match.B3)
 		if err != nil {
 			return nil, errors.New(fmt.Sprint("Failed to scan from matches: ", err))
@@ -430,7 +430,7 @@
 	for rows.Next() {
 		var team Stats
 		err = rows.Scan(
-			&team.TeamNumber, &team.MatchNumber, &team.Round, &team.CompLevel,
+			&team.TeamNumber, &team.MatchNumber, &team.SetNumber, &team.CompLevel,
 			&team.StartingQuadrant,
 			&team.AutoBallPickedUp[0], &team.AutoBallPickedUp[1], &team.AutoBallPickedUp[2],
 			&team.AutoBallPickedUp[3], &team.AutoBallPickedUp[4],
@@ -480,7 +480,7 @@
 	var matches []Match
 	for rows.Next() {
 		var match Match
-		err = rows.Scan(&match.MatchNumber, &match.Round, &match.CompLevel,
+		err = rows.Scan(&match.MatchNumber, &match.SetNumber, &match.CompLevel,
 			&match.R1, &match.R2, &match.R3, &match.B1, &match.B2, &match.B3)
 		if err != nil {
 			return nil, errors.New(fmt.Sprint("Failed to scan from matches: ", err))
@@ -522,7 +522,7 @@
 	for rows.Next() {
 		var team Stats
 		err = rows.Scan(
-			&team.TeamNumber, &team.MatchNumber, &team.Round, &team.CompLevel,
+			&team.TeamNumber, &team.MatchNumber, &team.SetNumber, &team.CompLevel,
 			&team.StartingQuadrant,
 			&team.AutoBallPickedUp[0], &team.AutoBallPickedUp[1], &team.AutoBallPickedUp[2],
 			&team.AutoBallPickedUp[3], &team.AutoBallPickedUp[4],
diff --git a/scouting/db/db_test.go b/scouting/db/db_test.go
index f19b68c..438e52e 100644
--- a/scouting/db/db_test.go
+++ b/scouting/db/db_test.go
@@ -65,7 +65,7 @@
 	correct := []Match{
 		Match{
 			MatchNumber: 7,
-			Round:       1,
+			SetNumber:   1,
 			CompLevel:   "quals",
 			R1:          9999, R2: 1000, R3: 777, B1: 0000, B2: 4321, B3: 1234,
 		},
@@ -174,7 +174,7 @@
 	}
 
 	err := fixture.db.AddToMatch(Match{
-		MatchNumber: 7, Round: 1, CompLevel: "quals",
+		MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
 		R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234,
 	})
 	check(t, err, "Failed to add match")
@@ -207,7 +207,7 @@
 	}
 
 	err := fixture.db.AddToMatch(Match{
-		MatchNumber: 7, Round: 1, CompLevel: "quals",
+		MatchNumber: 7, SetNumber: 1, CompLevel: "quals",
 		R1: 1236, R2: 1001, R3: 777, B1: 1000, B2: 4321, B3: 1234,
 	})
 	check(t, err, "Failed to add match")
@@ -231,10 +231,10 @@
 	defer fixture.TearDown()
 
 	testDatabase := []Match{
-		Match{MatchNumber: 2, Round: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149},
-		Match{MatchNumber: 4, Round: 1, CompLevel: "quals", R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698},
-		Match{MatchNumber: 3, Round: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262},
-		Match{MatchNumber: 6, Round: 1, CompLevel: "quals", R1: 191, R2: 132, R3: 773, B1: 994, B2: 435, B3: 696},
+		Match{MatchNumber: 2, SetNumber: 1, CompLevel: "quals", R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149},
+		Match{MatchNumber: 4, SetNumber: 1, CompLevel: "quals", R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698},
+		Match{MatchNumber: 3, SetNumber: 1, CompLevel: "quals", R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262},
+		Match{MatchNumber: 6, SetNumber: 1, CompLevel: "quals", R1: 191, R2: 132, R3: 773, B1: 994, B2: 435, B3: 696},
 	}
 
 	for i := 0; i < len(testDatabase); i++ {
@@ -244,11 +244,11 @@
 
 	correct := []Match{
 		Match{
-			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
 			R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
 		},
 		Match{
-			MatchNumber: 3, Round: 1, CompLevel: "quals",
+			MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
 			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
 		},
 	}
@@ -302,14 +302,14 @@
 
 	testDatabase := []Stats{
 		Stats{
-			TeamNumber: 1235, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 1,
 			AutoBallPickedUp: [5]bool{false, false, false, false, false},
 			ShotsMissed:      2, UpperGoalShots: 2, LowerGoalShots: 2,
 			ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
 			PlayedDefense: 2, DefenseReceivedScore: 1, Climbing: 2},
 		Stats{
-			TeamNumber: 1234, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1234, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 2,
 			AutoBallPickedUp: [5]bool{false, false, false, false, true},
 			ShotsMissed:      4, UpperGoalShots: 4, LowerGoalShots: 4,
@@ -317,7 +317,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
 		},
 		Stats{
-			TeamNumber: 1233, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1233, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 3,
 			AutoBallPickedUp: [5]bool{false, false, false, false, false},
 			ShotsMissed:      3, UpperGoalShots: 3, LowerGoalShots: 3,
@@ -325,7 +325,7 @@
 			PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
 		},
 		Stats{
-			TeamNumber: 1232, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1232, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 2,
 			AutoBallPickedUp: [5]bool{true, false, false, false, true},
 			ShotsMissed:      5, UpperGoalShots: 5, LowerGoalShots: 5,
@@ -333,7 +333,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 2, Climbing: 1,
 		},
 		Stats{
-			TeamNumber: 1231, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1231, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 3,
 			AutoBallPickedUp: [5]bool{false, false, true, false, false},
 			ShotsMissed:      6, UpperGoalShots: 6, LowerGoalShots: 6,
@@ -341,7 +341,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 3, Climbing: 1,
 		},
 		Stats{
-			TeamNumber: 1239, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1239, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 4,
 			AutoBallPickedUp: [5]bool{false, true, true, false, false},
 			ShotsMissed:      7, UpperGoalShots: 7, LowerGoalShots: 7,
@@ -351,7 +351,7 @@
 	}
 
 	err := fixture.db.AddToMatch(Match{
-		MatchNumber: 94, Round: 1, CompLevel: "quals",
+		MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 		R1: 1235, R2: 1234, R3: 1233, B1: 1232, B2: 1231, B3: 1239})
 	check(t, err, "Failed to add match")
 
@@ -362,7 +362,7 @@
 
 	correct := []Stats{
 		Stats{
-			TeamNumber: 1235, MatchNumber: 94, Round: 2, CompLevel: "quals",
+			TeamNumber: 1235, MatchNumber: 94, SetNumber: 2, CompLevel: "quals",
 			StartingQuadrant: 1,
 			AutoBallPickedUp: [5]bool{false, false, false, false, false},
 			ShotsMissed:      2, UpperGoalShots: 2, LowerGoalShots: 2,
@@ -433,23 +433,23 @@
 
 	correct := []Match{
 		Match{
-			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
 			R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
 		},
 		Match{
-			MatchNumber: 3, Round: 1, CompLevel: "quals",
+			MatchNumber: 3, SetNumber: 1, CompLevel: "quals",
 			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
 		},
 		Match{
-			MatchNumber: 4, Round: 1, CompLevel: "quals",
+			MatchNumber: 4, SetNumber: 1, CompLevel: "quals",
 			R1: 251, R2: 169, R3: 286, B1: 653, B2: 538, B3: 149,
 		},
 		Match{
-			MatchNumber: 5, Round: 1, CompLevel: "quals",
+			MatchNumber: 5, SetNumber: 1, CompLevel: "quals",
 			R1: 198, R2: 1421, R3: 538, B1: 26, B2: 448, B3: 262,
 		},
 		Match{
-			MatchNumber: 6, Round: 1, CompLevel: "quals",
+			MatchNumber: 6, SetNumber: 1, CompLevel: "quals",
 			R1: 251, R2: 188, R3: 286, B1: 555, B2: 538, B3: 149,
 		},
 	}
@@ -473,15 +473,15 @@
 
 	testDatabase := []Match{
 		Match{
-			MatchNumber: 1, Round: 1, CompLevel: "quals",
+			MatchNumber: 1, SetNumber: 1, CompLevel: "quals",
 			R1: 251, R2: 169, R3: 286, B1: 253, B2: 538, B3: 149,
 		},
 		Match{
-			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
 			R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698,
 		},
 		Match{
-			MatchNumber: 1, Round: 1, CompLevel: "quals",
+			MatchNumber: 1, SetNumber: 1, CompLevel: "quals",
 			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
 		},
 	}
@@ -493,11 +493,11 @@
 
 	correct := []Match{
 		Match{
-			MatchNumber: 2, Round: 1, CompLevel: "quals",
+			MatchNumber: 2, SetNumber: 1, CompLevel: "quals",
 			R1: 198, R2: 135, R3: 777, B1: 999, B2: 434, B3: 698,
 		},
 		Match{
-			MatchNumber: 1, Round: 1, CompLevel: "quals",
+			MatchNumber: 1, SetNumber: 1, CompLevel: "quals",
 			R1: 147, R2: 421, R3: 538, B1: 126, B2: 448, B3: 262,
 		},
 	}
@@ -584,14 +584,14 @@
 
 	correct := []Stats{
 		Stats{
-			TeamNumber: 1235, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1235, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 1,
 			AutoBallPickedUp: [5]bool{false, false, false, false, false},
 			ShotsMissed:      2, UpperGoalShots: 2, LowerGoalShots: 2,
 			ShotsMissedAuto: 2, UpperGoalAuto: 2, LowerGoalAuto: 2,
 			PlayedDefense: 2, DefenseReceivedScore: 3, Climbing: 2},
 		Stats{
-			TeamNumber: 1236, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1236, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 2,
 			AutoBallPickedUp: [5]bool{false, false, false, false, true},
 			ShotsMissed:      4, UpperGoalShots: 4, LowerGoalShots: 4,
@@ -599,7 +599,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 1, Climbing: 2,
 		},
 		Stats{
-			TeamNumber: 1237, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1237, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 3,
 			AutoBallPickedUp: [5]bool{false, false, false, false, false},
 			ShotsMissed:      3, UpperGoalShots: 3, LowerGoalShots: 3,
@@ -607,7 +607,7 @@
 			PlayedDefense: 3, DefenseReceivedScore: 0, Climbing: 3,
 		},
 		Stats{
-			TeamNumber: 1238, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1238, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 2,
 			AutoBallPickedUp: [5]bool{true, false, false, false, true},
 			ShotsMissed:      5, UpperGoalShots: 5, LowerGoalShots: 5,
@@ -615,7 +615,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
 		},
 		Stats{
-			TeamNumber: 1239, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1239, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 3,
 			AutoBallPickedUp: [5]bool{false, false, true, false, false},
 			ShotsMissed:      6, UpperGoalShots: 6, LowerGoalShots: 6,
@@ -623,7 +623,7 @@
 			PlayedDefense: 7, DefenseReceivedScore: 4, Climbing: 1,
 		},
 		Stats{
-			TeamNumber: 1233, MatchNumber: 94, Round: 1, CompLevel: "quals",
+			TeamNumber: 1233, MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 			StartingQuadrant: 4,
 			AutoBallPickedUp: [5]bool{false, true, true, false, false},
 			ShotsMissed:      7, UpperGoalShots: 7, LowerGoalShots: 7,
@@ -633,7 +633,7 @@
 	}
 
 	err := fixture.db.AddToMatch(Match{
-		MatchNumber: 94, Round: 1, CompLevel: "quals",
+		MatchNumber: 94, SetNumber: 1, CompLevel: "quals",
 		R1: 1235, R2: 1236, R3: 1237, B1: 1238, B2: 1239, B3: 1233})
 	check(t, err, "Failed to add match")
 
diff --git a/scouting/scouting_test.ts b/scouting/scouting_test.ts
index 5740cc8..e983a86 100644
--- a/scouting/scouting_test.ts
+++ b/scouting/scouting_test.ts
@@ -157,7 +157,7 @@
     expect(await getHeadingText()).toEqual('Team Selection');
     expect(await getValueOfInputById('match_number')).toEqual('3');
     expect(await getValueOfInputById('team_number')).toEqual('5254');
-    expect(await getValueOfInputById('round')).toEqual('2');
+    expect(await getValueOfInputById('set_number')).toEqual('2');
     expect(await getValueOfInputById('comp_level')).toEqual('3: sf');
   });
 
@@ -228,7 +228,7 @@
     expect(await getHeadingText()).toEqual('Team Selection');
     await setTextboxByIdTo('match_number', '2');
     await setTextboxByIdTo('team_number', '5254');
-    await setTextboxByIdTo('round', '42');
+    await setTextboxByIdTo('set_number', '42');
     await element(by.cssContainingText('option', 'Semi Finals')).click();
     await element(by.buttonText('Next')).click();
 
@@ -257,7 +257,7 @@
     // Validate Team Selection.
     await expectReviewFieldToBe('Match number', '2');
     await expectReviewFieldToBe('Team number', '5254');
-    await expectReviewFieldToBe('Round', '42');
+    await expectReviewFieldToBe('SetNumber', '42');
     await expectReviewFieldToBe('Comp Level', 'Semi Finals');
 
     // Validate Auto.
diff --git a/scouting/scraping/scrape.go b/scouting/scraping/scrape.go
index 19426cf..625157a 100644
--- a/scouting/scraping/scrape.go
+++ b/scouting/scraping/scrape.go
@@ -13,8 +13,10 @@
 
 // Stores the TBA API key to access the API.
 type scrapingConfig struct {
-	ApiKey  string `json:"api_key"`
-	BaseUrl string `json:"base_url"`
+	ApiKey    string `json:"api_key"`
+	BaseUrl   string `json:"base_url"`
+	Year      int32  `json:"year"`
+	EventCode string `json:"event_code"`
 }
 
 // Takes in year and FIRST event code and returns requested information according to TBA.
@@ -47,9 +49,15 @@
 	if config.BaseUrl == "" {
 		config.BaseUrl = "https://www.thebluealliance.com"
 	}
+	if config.Year == 0 {
+		config.Year = year
+	}
+	if config.EventCode == "" {
+		config.EventCode = eventCode
+	}
 
 	// Create the TBA event key for the year and event code.
-	eventKey := strconv.Itoa(int(year)) + eventCode
+	eventKey := strconv.Itoa(int(config.Year)) + config.EventCode
 
 	// Create a get request for the match info.
 	req, err := http.NewRequest("GET", config.BaseUrl+"/api/v3/event/"+eventKey+"/"+category, nil)
diff --git a/scouting/webserver/BUILD b/scouting/webserver/BUILD
index 745852a..3df423e 100644
--- a/scouting/webserver/BUILD
+++ b/scouting/webserver/BUILD
@@ -9,6 +9,7 @@
     deps = [
         "//scouting/db",
         "//scouting/scraping",
+        "//scouting/webserver/rankings",
         "//scouting/webserver/requests",
         "//scouting/webserver/server",
         "//scouting/webserver/static",
diff --git a/scouting/webserver/main.go b/scouting/webserver/main.go
index 8f4298b..5d4ab01 100644
--- a/scouting/webserver/main.go
+++ b/scouting/webserver/main.go
@@ -15,6 +15,7 @@
 
 	"github.com/frc971/971-Robot-Code/scouting/db"
 	"github.com/frc971/971-Robot-Code/scouting/scraping"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/rankings"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/server"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/static"
@@ -131,6 +132,9 @@
 	scoutingServer.Start(*portPtr)
 	fmt.Println("Serving", *dirPtr, "on port", *portPtr)
 
+	scraper := rankings.RankingScraper{}
+	scraper.Start(database, 0, "", *blueAllianceConfigPtr)
+
 	// Block until the user hits Ctrl-C.
 	sigint := make(chan os.Signal, 1)
 	signal.Notify(sigint, syscall.SIGINT)
@@ -140,5 +144,6 @@
 
 	fmt.Println("Shutting down.")
 	scoutingServer.Stop()
+	scraper.Stop()
 	fmt.Println("Successfully shut down.")
 }
diff --git a/scouting/webserver/rankings/rankings.go b/scouting/webserver/rankings/rankings.go
index 064aa13..6e63c0a 100644
--- a/scouting/webserver/rankings/rankings.go
+++ b/scouting/webserver/rankings/rankings.go
@@ -9,7 +9,7 @@
 	"time"
 )
 
-type rankingScraper struct {
+type RankingScraper struct {
 	doneChan     chan<- bool
 	checkStopped chan<- bool
 }
@@ -52,7 +52,7 @@
 	}
 }
 
-func (scraper *rankingScraper) Start(database Database, year int32, eventCode string, blueAllianceConfig string) {
+func (scraper *RankingScraper) Start(database Database, year int32, eventCode string, blueAllianceConfig string) {
 	scraper.doneChan = make(chan bool, 1)
 	scraper.checkStopped = make(chan bool, 1)
 
@@ -79,7 +79,7 @@
 	}(database, year, eventCode)
 }
 
-func (scraper *rankingScraper) Stop() {
+func (scraper *RankingScraper) Stop() {
 	scraper.doneChan <- true
 
 	for {
diff --git a/scouting/webserver/rankings/rankings_test.go b/scouting/webserver/rankings/rankings_test.go
index f47c0a2..aa23c76 100644
--- a/scouting/webserver/rankings/rankings_test.go
+++ b/scouting/webserver/rankings/rankings_test.go
@@ -30,13 +30,13 @@
 
 func TestGetRankings(t *testing.T) {
 	database := MockDatabase{}
-	scraper := rankingScraper{}
+	scraper := RankingScraper{}
 	tbaServer := server.NewScoutingServer()
 	tbaServer.Handle("/", ServeRankings(http.FileServer(http.Dir("../../"))))
 	tbaServer.Start(8000)
 	defer tbaServer.Stop()
 
-	scraper.Start(&database, 2016, "nytr", "scouting_test_config.json")
+	scraper.Start(&database, 0, "", "scouting_test_config.json")
 	defer scraper.Stop()
 
 	for {
diff --git a/scouting/webserver/rankings/scouting_test_config.json b/scouting/webserver/rankings/scouting_test_config.json
index 19a1b4f..40a7747 100644
--- a/scouting/webserver/rankings/scouting_test_config.json
+++ b/scouting/webserver/rankings/scouting_test_config.json
@@ -1,4 +1,6 @@
 {
      "api_key": "dummy_key_that_is_not_actually_used_in_this_test",
-     "base_url": "http://localhost:8000"
+     "base_url": "http://localhost:8000",
+     "year": 2022,
+     "event_code": "CMPTX"
 }
\ No newline at end of file
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index 6189284..2bcd75b 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -62,7 +62,7 @@
         json_path = write_json_request({
             "team": 100,
             "match": 1,
-            "round": 2,
+            "set_number": 2,
             "comp_level": "quals",
             "starting_quadrant": 3,
             "auto_ball_1": True,
@@ -111,7 +111,7 @@
             ClimbLevel: (request_data_scouting_response.ClimbLevel) Medium,
             DefenseReceivedRating: (int32) 4,
             Comment: (string) (len=35) "A very inspiring and useful comment",
-            Round: (int32) 2,
+            SetNumber: (int32) 2,
             CompLevel: (string) (len=5) "quals"
             }"""), stdout)
 
diff --git a/scouting/webserver/requests/messages/request_all_matches_response.fbs b/scouting/webserver/requests/messages/request_all_matches_response.fbs
index 90401e3..9d3be62 100644
--- a/scouting/webserver/requests/messages/request_all_matches_response.fbs
+++ b/scouting/webserver/requests/messages/request_all_matches_response.fbs
@@ -2,7 +2,7 @@
 
 table Match {
     match_number:int (id: 0);
-    round:int (id: 1);
+    set_number:int (id: 1);
     comp_level:string (id: 2);
     r1:int (id: 3);
     r2:int (id: 4);
diff --git a/scouting/webserver/requests/messages/request_data_scouting_response.fbs b/scouting/webserver/requests/messages/request_data_scouting_response.fbs
index 9171335..071a848 100644
--- a/scouting/webserver/requests/messages/request_data_scouting_response.fbs
+++ b/scouting/webserver/requests/messages/request_data_scouting_response.fbs
@@ -10,13 +10,13 @@
     Low,
     Medium,
     High,
-    Transversal,
+    Traversal,
 }
 
 table Stats {
     team:int (id: 0);
     match:int (id: 1);
-    round:int (id: 20);
+    set_number:int (id: 20);
     comp_level:string (id: 21);
 
     missed_shots_auto:int (id: 2);
diff --git a/scouting/webserver/requests/messages/request_matches_for_team_response.fbs b/scouting/webserver/requests/messages/request_matches_for_team_response.fbs
index cbb1895..dcfec52 100644
--- a/scouting/webserver/requests/messages/request_matches_for_team_response.fbs
+++ b/scouting/webserver/requests/messages/request_matches_for_team_response.fbs
@@ -2,7 +2,7 @@
 
 table Match {
     match_number:int (id: 0);
-    round:int (id: 1);
+    set_number:int (id: 1);
     comp_level:string (id: 2);
     r1:int (id: 3);
     r2:int (id: 4);
diff --git a/scouting/webserver/requests/messages/submit_data_scouting.fbs b/scouting/webserver/requests/messages/submit_data_scouting.fbs
index b1ae2b8..36990f5 100644
--- a/scouting/webserver/requests/messages/submit_data_scouting.fbs
+++ b/scouting/webserver/requests/messages/submit_data_scouting.fbs
@@ -10,13 +10,13 @@
     Low,
     Medium,
     High,
-    Transversal,
+    Traversal,
 }
 
 table SubmitDataScouting {
     team:int (id: 0);
     match:int (id: 1);
-    round:int (id: 19);
+    set_number:int (id: 19);
     comp_level:string (id: 20);
 
     missed_shots_auto:int (id: 2);
diff --git a/scouting/webserver/requests/requests.go b/scouting/webserver/requests/requests.go
index af52510..cef87aa 100644
--- a/scouting/webserver/requests/requests.go
+++ b/scouting/webserver/requests/requests.go
@@ -144,7 +144,7 @@
 	stats := db.Stats{
 		TeamNumber:       request.Team(),
 		MatchNumber:      request.Match(),
-		Round:            request.Round(),
+		SetNumber:        request.SetNumber(),
 		CompLevel:        string(request.CompLevel()),
 		StartingQuadrant: request.StartingQuadrant(),
 		AutoBallPickedUp: [5]bool{
@@ -209,7 +209,7 @@
 	for _, match := range matches {
 		response.MatchList = append(response.MatchList, &request_all_matches_response.MatchT{
 			MatchNumber: match.MatchNumber,
-			Round:       match.Round,
+			SetNumber:   match.SetNumber,
 			CompLevel:   match.CompLevel,
 			R1:          match.R1,
 			R2:          match.R2,
@@ -252,7 +252,7 @@
 	for _, match := range matches {
 		response.MatchList = append(response.MatchList, &request_all_matches_response.MatchT{
 			MatchNumber: match.MatchNumber,
-			Round:       match.Round,
+			SetNumber:   match.SetNumber,
 			CompLevel:   match.CompLevel,
 			R1:          match.R1,
 			R2:          match.R2,
@@ -296,7 +296,7 @@
 		response.StatsList = append(response.StatsList, &request_data_scouting_response.StatsT{
 			Team:                  stat.TeamNumber,
 			Match:                 stat.MatchNumber,
-			Round:                 stat.Round,
+			SetNumber:             stat.SetNumber,
 			CompLevel:             stat.CompLevel,
 			StartingQuadrant:      stat.StartingQuadrant,
 			AutoBall1:             stat.AutoBallPickedUp[0],
@@ -395,7 +395,7 @@
 		// Add the match to the database.
 		err = handler.db.AddToMatch(db.Match{
 			MatchNumber: int32(match.MatchNumber),
-			Round:       int32(match.SetNumber),
+			SetNumber:   int32(match.SetNumber),
 			CompLevel:   match.CompLevel,
 			R1:          red[0],
 			R2:          red[1],
diff --git a/scouting/webserver/requests/requests_test.go b/scouting/webserver/requests/requests_test.go
index 20af93c..4dda143 100644
--- a/scouting/webserver/requests/requests_test.go
+++ b/scouting/webserver/requests/requests_test.go
@@ -84,7 +84,7 @@
 	builder.Finish((&submit_data_scouting.SubmitDataScoutingT{
 		Team:                  971,
 		Match:                 1,
-		Round:                 8,
+		SetNumber:             8,
 		CompLevel:             "quals",
 		StartingQuadrant:      2,
 		AutoBall1:             true,
@@ -121,15 +121,15 @@
 	db := MockDatabase{
 		matches: []db.Match{
 			{
-				MatchNumber: 1, Round: 1, CompLevel: "qual",
+				MatchNumber: 1, SetNumber: 1, CompLevel: "qual",
 				R1: 5, R2: 42, R3: 600, B1: 971, B2: 400, B3: 200,
 			},
 			{
-				MatchNumber: 2, Round: 1, CompLevel: "qual",
+				MatchNumber: 2, SetNumber: 1, CompLevel: "qual",
 				R1: 6, R2: 43, R3: 601, B1: 972, B2: 401, B3: 201,
 			},
 			{
-				MatchNumber: 3, Round: 1, CompLevel: "qual",
+				MatchNumber: 3, SetNumber: 1, CompLevel: "qual",
 				R1: 7, R2: 44, R3: 602, B1: 973, B2: 402, B3: 202,
 			},
 		},
@@ -149,7 +149,7 @@
 
 	expected := request_all_matches_response.RequestAllMatchesResponseT{
 		MatchList: []*request_all_matches_response.MatchT{
-			// MatchNumber, Round, CompLevel
+			// MatchNumber, SetNumber, CompLevel
 			// R1, R2, R3, B1, B2, B3
 			{
 				1, 1, "qual",
@@ -181,11 +181,11 @@
 	db := MockDatabase{
 		matches: []db.Match{
 			{
-				MatchNumber: 1, Round: 1, CompLevel: "qual",
+				MatchNumber: 1, SetNumber: 1, CompLevel: "qual",
 				R1: 5, R2: 42, R3: 600, B1: 971, B2: 400, B3: 200,
 			},
 			{
-				MatchNumber: 2, Round: 1, CompLevel: "qual",
+				MatchNumber: 2, SetNumber: 1, CompLevel: "qual",
 				R1: 6, R2: 43, R3: 601, B1: 972, B2: 401, B3: 201,
 			},
 		},
@@ -207,7 +207,7 @@
 
 	expected := request_matches_for_team_response.RequestMatchesForTeamResponseT{
 		MatchList: []*request_matches_for_team_response.MatchT{
-			// MatchNumber, Round, CompLevel
+			// MatchNumber, SetNumber, CompLevel
 			// R1, R2, R3, B1, B2, B3
 			{
 				1, 1, "qual",
@@ -230,7 +230,7 @@
 	db := MockDatabase{
 		stats: []db.Stats{
 			{
-				TeamNumber: 971, MatchNumber: 1, Round: 2, CompLevel: "quals",
+				TeamNumber: 971, MatchNumber: 1, SetNumber: 2, CompLevel: "quals",
 				StartingQuadrant: 1,
 				AutoBallPickedUp: [5]bool{true, false, false, false, true},
 				ShotsMissed:      1, UpperGoalShots: 2, LowerGoalShots: 3,
@@ -239,7 +239,7 @@
 				Comment: "a lovely comment", CollectedBy: "john",
 			},
 			{
-				TeamNumber: 972, MatchNumber: 1, Round: 4, CompLevel: "extra",
+				TeamNumber: 972, MatchNumber: 1, SetNumber: 4, CompLevel: "extra",
 				StartingQuadrant: 2,
 				AutoBallPickedUp: [5]bool{false, false, true, false, false},
 				ShotsMissed:      2, UpperGoalShots: 3, LowerGoalShots: 4,
@@ -265,7 +265,7 @@
 	expected := request_data_scouting_response.RequestDataScoutingResponseT{
 		StatsList: []*request_data_scouting_response.StatsT{
 			{
-				Team: 971, Match: 1, Round: 2, CompLevel: "quals",
+				Team: 971, Match: 1, SetNumber: 2, CompLevel: "quals",
 				MissedShotsAuto: 4, UpperGoalAuto: 5, LowerGoalAuto: 6,
 				MissedShotsTele: 1, UpperGoalTele: 2, LowerGoalTele: 3,
 				DefenseRating:         7,
@@ -278,7 +278,7 @@
 				Comment:          "a lovely comment",
 			},
 			{
-				Team: 972, Match: 1, Round: 4, CompLevel: "extra",
+				Team: 972, Match: 1, SetNumber: 4, CompLevel: "extra",
 				MissedShotsAuto: 5, UpperGoalAuto: 6, LowerGoalAuto: 7,
 				MissedShotsTele: 2, UpperGoalTele: 3, LowerGoalTele: 4,
 				DefenseRating:         8,
@@ -414,7 +414,7 @@
 	expectedMatches := []db.Match{
 		{
 			MatchNumber: 1,
-			Round:       2,
+			SetNumber:   2,
 			CompLevel:   "qual",
 			R1:          100,
 			R2:          200,
diff --git a/scouting/www/app.ng.html b/scouting/www/app.ng.html
index 7bf7e63..297fd39 100644
--- a/scouting/www/app.ng.html
+++ b/scouting/www/app.ng.html
@@ -75,7 +75,7 @@
     (switchTabsEvent)="switchTabTo($event)"
     [teamNumber]="selectedTeamInMatch.teamNumber"
     [matchNumber]="selectedTeamInMatch.matchNumber"
-    [round]="selectedTeamInMatch.round"
+    [setNumber]="selectedTeamInMatch.setNumber"
     [compLevel]="selectedTeamInMatch.compLevel"
     *ngSwitchCase="'Entry'"
   ></app-entry>
diff --git a/scouting/www/app.ts b/scouting/www/app.ts
index 5180218..4f95c90 100644
--- a/scouting/www/app.ts
+++ b/scouting/www/app.ts
@@ -14,7 +14,7 @@
 type TeamInMatch = {
   teamNumber: number;
   matchNumber: number;
-  round: number;
+  setNumber: number;
   compLevel: string;
 };
 
@@ -27,7 +27,7 @@
   selectedTeamInMatch: TeamInMatch = {
     teamNumber: 1,
     matchNumber: 1,
-    round: 1,
+    setNumber: 1,
     compLevel: 'qm',
   };
   tab: Tab = 'MatchList';
diff --git a/scouting/www/entry/entry.component.ts b/scouting/www/entry/entry.component.ts
index 9637e8c..d6829c5 100644
--- a/scouting/www/entry/entry.component.ts
+++ b/scouting/www/entry/entry.component.ts
@@ -54,7 +54,7 @@
   @Output() switchTabsEvent = new EventEmitter<string>();
   @Input() matchNumber: number = 1;
   @Input() teamNumber: number = 1;
-  @Input() round: number = 1;
+  @Input() setNumber: number = 1;
   @Input() compLevel: CompLevel = 'qm';
   autoUpperShotsMade: number = 0;
   autoLowerShotsMade: number = 0;
@@ -135,7 +135,7 @@
     SubmitDataScouting.startSubmitDataScouting(builder);
     SubmitDataScouting.addTeam(builder, this.teamNumber);
     SubmitDataScouting.addMatch(builder, this.matchNumber);
-    SubmitDataScouting.addRound(builder, this.round);
+    SubmitDataScouting.addSetNumber(builder, this.setNumber);
     SubmitDataScouting.addCompLevel(builder, compLevel);
     SubmitDataScouting.addMissedShotsAuto(builder, this.autoShotsMissed);
     SubmitDataScouting.addUpperGoalAuto(builder, this.autoUpperShotsMade);
diff --git a/scouting/www/entry/entry.ng.html b/scouting/www/entry/entry.ng.html
index 46e5989..6dab39b 100644
--- a/scouting/www/entry/entry.ng.html
+++ b/scouting/www/entry/entry.ng.html
@@ -29,11 +29,17 @@
       />
     </div>
     <div class="row">
-      <label for="round">Round</label>
-      <input [(ngModel)]="round" type="number" id="round" min="1" max="10" />
+      <label for="set_number">Set Number</label>
+      <input
+        [(ngModel)]="setNumber"
+        type="number"
+        id="set_number"
+        min="1"
+        max="10"
+      />
     </div>
     <div class="row">
-      <label for="comp_level">Round</label>
+      <label for="comp_level">Comp Level</label>
       <select [(ngModel)]="compLevel" type="number" id="comp_level">
         <option *ngFor="let level of COMP_LEVELS" [ngValue]="level">
           {{COMP_LEVEL_LABELS[level]}}
@@ -217,10 +223,10 @@
         [(ngModel)]="level"
         type="radio"
         name="level"
-        id="transversal"
-        [value]="ClimbLevel.Transversal"
+        id="traversal"
+        [value]="ClimbLevel.Traversal"
       />
-      <label for="transversal">Transversal</label>
+      <label for="traversal">Traversal</label>
       <br />
       <input
         [(ngModel)]="level"
@@ -360,7 +366,7 @@
     <ul>
       <li>Match number: {{matchNumber}}</li>
       <li>Team number: {{teamNumber}}</li>
-      <li>Round: {{round}}</li>
+      <li>SetNumber: {{setNumber}}</li>
       <li>Comp Level: {{COMP_LEVEL_LABELS[compLevel]}}</li>
     </ul>
 
diff --git a/scouting/www/match_list/match_list.component.ts b/scouting/www/match_list/match_list.component.ts
index 1dc1f49..ab54e3e 100644
--- a/scouting/www/match_list/match_list.component.ts
+++ b/scouting/www/match_list/match_list.component.ts
@@ -12,7 +12,7 @@
 type TeamInMatch = {
   teamNumber: number;
   matchNumber: number;
-  round: number;
+  setNumber: number;
   compLevel: string;
 };
 
@@ -62,9 +62,9 @@
   }
 
   displayMatchNumber(match: Match): string {
-    // Only display the set number ("round") for eliminations matches.
-    const round = match.compLevel() == 'qm' ? '' : `${match.round()}`;
-    return `${this.matchType(match)} ${round} Match ${match.matchNumber()}`;
+    // Only display the set number for eliminations matches.
+    const setNumber = match.compLevel() == 'qm' ? '' : `${match.setNumber()}`;
+    return `${this.matchType(match)} ${setNumber} Match ${match.matchNumber()}`;
   }
 
   ngOnInit() {
diff --git a/scouting/www/match_list/match_list.ng.html b/scouting/www/match_list/match_list.ng.html
index b2e66f8..e890faf 100644
--- a/scouting/www/match_list/match_list.ng.html
+++ b/scouting/www/match_list/match_list.ng.html
@@ -13,7 +13,7 @@
         (click)="setTeamInMatch({
             teamNumber: team.teamNumber,
             matchNumber: match.matchNumber(),
-            round: match.round(),
+            setNumber: match.setNumber(),
             compLevel: match.compLevel()
             })"
         class="match-item"
diff --git a/scouting/www/rpc/match_list_requestor.ts b/scouting/www/rpc/match_list_requestor.ts
index ddbb221..f97b1ca 100644
--- a/scouting/www/rpc/match_list_requestor.ts
+++ b/scouting/www/rpc/match_list_requestor.ts
@@ -56,15 +56,15 @@
         if (aMatchNumber > bMatchNumber) {
           return 1;
         }
-        // Lastly, sort by round. I.e. Semi Final 1 Match 1 happens first. Then
-        // comes Semi Final 2 Match 1. Then comes Semi Final 1 Match 2. Then
+        // Lastly, sort by set number. I.e. Semi Final 1 Match 1 happens first.
+        // Then comes Semi Final 2 Match 1. Then comes Semi Final 1 Match 2. Then
         // Semi Final 2 Match 2.
-        const aRound = a.round();
-        const bRound = b.round();
-        if (aRound < bRound) {
+        const aSetNumber = a.setNumber();
+        const bSetNumber = b.setNumber();
+        if (aSetNumber < bSetNumber) {
           return -1;
         }
-        if (aRound > bRound) {
+        if (aSetNumber > bSetNumber) {
           return 1;
         }
         return 0;