]> git.sesse.net Git - skvidarsync/commitdiff
Combine the two Sheets API calls into one, to reduce the latency further.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 10 Nov 2023 17:05:13 +0000 (18:05 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 10 Nov 2023 17:05:13 +0000 (18:05 +0100)
bin/sync.pl

index e913c16d8613f07625c05d9cf79483b66428c99a..bfac355fe6dd87b2dcc8d0a937cda65a2221d29f 100644 (file)
@@ -189,7 +189,7 @@ sub get_group_assignments {
        my $json = shift;
 
        my %assignments = ();
-       my $rows = $json->{'sheets'}[0]{'data'}[0]{'rowData'};
+       my $rows = $json->{'data'}[0]{'rowData'};
        my @curr_groups = ();
        for my $row (@$rows) {
                my $col = 0;
@@ -280,7 +280,7 @@ sub find_where_each_name_is {
        my $json = shift;
 
        my %seen_names = ();
-       my $rows = $json->{'sheets'}[0]{'data'}[0]{'rowData'};
+       my $rows = $json->{'data'}[0]{'rowData'};
        my $rowno = 3;
        for my $row (@$rows) {
                my $colno = 0;
@@ -540,15 +540,18 @@ sub run {
                delete $colors{$userid};
        }
 
-       # Get the list of all people in the sheet (we're going to need them soon anyway).
+       # Get the list of all people in the sheet (we're going to need them soon).
+       # Also get the Slack mapping when we're doing an API request anyway.
        my $start = [Time::HiRes::gettimeofday];
-       my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A4:Z5000&fields=sheets/data/rowData/values/userEnteredValue',
+       my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A4:Z5000&ranges=Slack-mapping!A5:C5000&fields=sheets/data/rowData/values/userEnteredValue',
                Authorization => 'Bearer ' . $token,
                Accept_Encoding => HTTP::Message::decodable
        );
-       log_timing($start, "/spreadsheets/$tab_name");
+       log_timing($start, "/spreadsheets/");
 
-       my $main_sheet_json = JSON::XS::decode_json($response->decoded_content);
+       my $sheets_json = JSON::XS::decode_json($response->decoded_content);
+       my $main_sheet_json = $sheets_json->{'sheets'}[0];
+       my $mapping_sheet_json = $sheets_json->{'sheets'}[1];
 
        # Update the list of groups we've seen people in.
        my %assignments = get_group_assignments($main_sheet_json);
@@ -570,14 +573,7 @@ sub run {
        my %slack_userid_to_slack_name = ();
        my %slack_userid_to_row = ();
 
-       $start = [Time::HiRes::gettimeofday];
-       $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=Slack-mapping!A5:C5000&fields=sheets/data/rowData/values/userEnteredValue',
-               Authorization => 'Bearer ' . $token,
-               Accept_Encoding => HTTP::Message::decodable
-       );
-       log_timing($start, "/spreadsheets/Slack-mapping");
-       my $mapping_sheet_json = JSON::XS::decode_json($response->decoded_content);
-       my $mapping_sheet_rows = $mapping_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
+       my $mapping_sheet_rows = $mapping_sheet_json->{'data'}[0]{'rowData'};
        my $cur_row = 5;
        for my $row (@$mapping_sheet_rows) {
                my $slack_id = $row->{'values'}[0]{'userEnteredValue'}{'stringValue'};
@@ -633,7 +629,7 @@ sub run {
                } else {
                        # Do a search through all the available names in the sheet to find an obvious(ish) match.
                        my @candidates = ();
-                       my $main_sheet_rows = $main_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
+                       my $main_sheet_rows = $main_sheet_json->{'data'}[0]{'rowData'};
                        for my $row (@$main_sheet_rows) {
                                for my $val (@{$row->{'values'}}) {
                                        my $name = get_spreadsheet_name($val);
@@ -690,7 +686,7 @@ sub run {
 
        # Find the list of names to mark yellow.
        my %want_colors = ();
-       my $main_sheet_rows = $main_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
+       my $main_sheet_rows = $main_sheet_json->{'data'}[0]{'rowData'};
        for my $userid (@attending_userids) {
                next if (!exists($slack_userid_to_real_name{$userid}));
                my $slack_name = $slack_userid_to_slack_name{$userid};