Add alert for scouting

Alert scouters when someone else is scouting the same team.

Signed-off-by: Emily Markova <emily.markova@gmail.com>
Change-Id: Id62ad1a96ff90ef4cba1797c21bc4063ccbdeae5
diff --git a/scouting/webserver/requests/debug/BUILD b/scouting/webserver/requests/debug/BUILD
index ff85206..7a78456 100644
--- a/scouting/webserver/requests/debug/BUILD
+++ b/scouting/webserver/requests/debug/BUILD
@@ -16,6 +16,7 @@
         "//scouting/webserver/requests/messages:request_all_matches_response_go_fbs",
         "//scouting/webserver/requests/messages:request_all_notes_response_go_fbs",
         "//scouting/webserver/requests/messages:request_all_pit_images_response_go_fbs",
+        "//scouting/webserver/requests/messages:request_current_scouting_response_go_fbs",
         "//scouting/webserver/requests/messages:request_notes_for_team_response_go_fbs",
         "//scouting/webserver/requests/messages:request_pit_images_response_go_fbs",
         "//scouting/webserver/requests/messages:request_shift_schedule_response_go_fbs",
diff --git a/scouting/webserver/requests/debug/cli/cli_test.py b/scouting/webserver/requests/debug/cli/cli_test.py
index cfdcd03..70a94c8 100644
--- a/scouting/webserver/requests/debug/cli/cli_test.py
+++ b/scouting/webserver/requests/debug/cli/cli_test.py
@@ -96,6 +96,15 @@
 
             time.sleep(0.25)
 
+    def test_request_current_scouting(self):
+        self.start_servers(year=2020, event_code="fake")
+
+        # First submit some data to be added to the database.
+        json_path = write_json_request({"team_number": "971"})
+        exit_code, _, stderr = run_debug_cli(
+            ["-requestCurrentScouting", json_path])
+        self.assertEqual(exit_code, 0, stderr)
+
     def test_submit_and_request_notes(self):
         self.start_servers(year=2020, event_code="fake")
 
diff --git a/scouting/webserver/requests/debug/cli/main.go b/scouting/webserver/requests/debug/cli/main.go
index a4346e5..f513c50 100644
--- a/scouting/webserver/requests/debug/cli/main.go
+++ b/scouting/webserver/requests/debug/cli/main.go
@@ -95,6 +95,8 @@
 		"If specified, parse the file as a requestAllDriverRankings JSON request.")
 	requestAllNotesPtr := flag.String("requestAllNotes", "",
 		"If specified, parse the file as a requestAllNotes JSON request.")
+	requestCurrentScoutingPtr := flag.String("requestCurrentScouting", "",
+		"If specified, parse the file as a requestCurrentScouting JSON request.")
 	flag.Parse()
 
 	spew.Config.Indent = *indentPtr
@@ -144,4 +146,11 @@
 		*requestAllNotesPtr,
 		*addressPtr,
 		debug.RequestAllNotes)
+
+	maybePerformRequest(
+		"requestCurrentScouting",
+		"scouting/webserver/requests/messages/request_current_scouting.fbs",
+		*requestCurrentScoutingPtr,
+		*addressPtr,
+		debug.RequestCurrentScouting)
 }
diff --git a/scouting/webserver/requests/debug/debug.go b/scouting/webserver/requests/debug/debug.go
index ed8a1b7..88b4eac 100644
--- a/scouting/webserver/requests/debug/debug.go
+++ b/scouting/webserver/requests/debug/debug.go
@@ -18,6 +18,7 @@
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_matches_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_notes_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_all_pit_images_response"
+	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_current_scouting_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_notes_for_team_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_pit_images_response"
 	"github.com/frc971/971-Robot-Code/scouting/webserver/requests/messages/request_shift_schedule_response"
@@ -33,6 +34,9 @@
 // The username to submit the various requests as.
 const DefaultUsername = "debug_cli"
 
+// TODO: Make the username an argument of the Request* functions.
+var Username = DefaultUsername
+
 // A struct that can be used as an `error`. It contains information about the
 // why the server was unhappy and what the corresponding request was.
 type ResponseError struct {
@@ -82,7 +86,7 @@
 		return nil, err
 	}
 	req.Header.Add("Authorization", "Basic "+
-		base64.StdEncoding.EncodeToString([]byte(DefaultUsername+":")))
+		base64.StdEncoding.EncodeToString([]byte(Username+":")))
 
 	client := &http.Client{}
 	resp, err := client.Do(req)
@@ -172,6 +176,12 @@
 		request_shift_schedule_response.GetRootAsRequestShiftScheduleResponse)
 }
 
+func RequestCurrentScouting(server string, requestBytes []byte) (*request_current_scouting_response.RequestCurrentScoutingResponseT, error) {
+	return sendMessage[request_current_scouting_response.RequestCurrentScoutingResponseT](
+		server+"/requests/request/current_scouting", requestBytes,
+		request_current_scouting_response.GetRootAsRequestCurrentScoutingResponse)
+}
+
 func SubmitShiftSchedule(server string, requestBytes []byte) (*submit_shift_schedule_response.SubmitShiftScheduleResponseT, error) {
 	return sendMessage[submit_shift_schedule_response.SubmitShiftScheduleResponseT](
 		server+"/requests/submit/shift_schedule", requestBytes,