Skip to content

Commit d0daade

Browse files
authored
Merge pull request #1597 from cmu-delphi/krivard/ctis-ww-makefile
adapt makefile for weekly weights
2 parents 5efe4f0 + 02016fb commit d0daade

11 files changed

+63
-45
lines changed

facebook/Makefile

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ ONEWEEK:=$(shell date --date "$(TODAY) -7 day" +"%Y-%m-%d")
77
THREEWEEK:=$(shell date --date "$(TODAY) -21 day" +"%Y-%m-%d")
88
LAST_SATURDAY:=$(shell date -d "last Saturday" +"%Y-%m-%d")
99
LAST_SUNDAY:=$(shell date -d "$(LAST_SATURDAY) -6 day" +"%Y-%m-%d")
10+
TUESDAY:=$(shell date -d "$(LAST_SATURDAY) +3 day" +"%Y-%m-%d")
1011

1112
MESSAGES:="messages/$(TODAY).messages"
1213

@@ -46,25 +47,35 @@ else
4647
SFTP_POST:=sshpass -p $(DELPHI_SURVEY_SFTP_PASSWORD) sftp $(SFTP_OPTIONS) -b <(echo -e "$${BATCH}") -P 2222 $(DELPHI_SURVEY_SFTP_USER)
4748
endif
4849

50+
ifneq ("$(wildcard params.json)","")
51+
ifeq ($(WEIGHTS),$(WEEKLY_WEIGHTS))
52+
$(error "'weights_in_dir' and 'weekly_weights_in_dir' must be different.")
53+
endif
54+
endif
55+
4956
default:
5057
@echo No default implemented yet
5158

5259
scratch:
5360
mkdir scratch
5461
rm -rf scratch/*
5562

56-
tidy%: receiving
57-
rm -rf tidy$*/$(RECEIVING)
58-
rm -rf tidy$*/$(INDIVIDUAL)
59-
rm -rf tidy$*/$(INDIVIDUAL_RACEETH)
60-
rm -f tidy$*/params.json
61-
mkdir -p tidy$* tidy$*/$(RECEIVING) tidy$*/$(INDIVIDUAL) tidy$*/$(INDIVIDUAL_RACEETH)
62-
cp params.json tidy$*/
63-
mv $(RECEIVING)/*.csv tidy$*/$(RECEIVING)
64-
mv $(INDIVIDUAL)/*.csv* tidy$*/$(INDIVIDUAL)
65-
mv $(INDIVIDUAL_RACEETH)/*.csv* tidy$*/$(INDIVIDUAL_RACEETH)
66-
tar -czf scratch/tidy$*-`date +"%Y-%m-%d-%H%M%S"`.tgz --exclude='tidy*-*.tgz' tidy$*
67-
mv scratch/*.tgz tidy$*/
63+
$(INDIVIDUAL) $(INDIVIDUAL_RACEETH):
64+
mkdir $@
65+
66+
tidy_%: receiving
67+
rm -rf $@/$(RECEIVING)
68+
rm -rf $@/$(INDIVIDUAL)
69+
rm -rf $@/$(INDIVIDUAL_RACEETH)
70+
rm -f $@/params.json
71+
mkdir -p $@ $@/$(RECEIVING) $@/$(INDIVIDUAL) $@/$(INDIVIDUAL_RACEETH)
72+
cp params.json $@/
73+
# Check for _any_ matching files using https://stackoverflow.com/a/6364244/14401472
74+
if compgen -G "$(RECEIVING)/*.csv" > /dev/null; then mv $(RECEIVING)/*.csv $@/$(RECEIVING); fi
75+
mv $(INDIVIDUAL)/*.csv* $@/$(INDIVIDUAL)
76+
mv $(INDIVIDUAL_RACEETH)/*.csv* $@/$(INDIVIDUAL_RACEETH)
77+
tar -czf scratch/$@-`date +"%Y-%m-%d-%H%M%S"`.tgz --exclude='tidy*-*.tgz' --exclude='*.done' $@
78+
mv scratch/*.tgz $@/
6879

6980
clean:
7081
rm -f $(RECEIVING)/*.csv $(INDIVIDUAL)/*.csv $(INDIVIDUAL_RACEETH)/*.csv $(CIDS)/*.csv $(CIDS_EXP)/*.csv
@@ -150,7 +161,7 @@ $(WEIGHTS): $(TODAY)
150161
fi
151162

152163
$(WEEKLY_WEIGHTS): $(TODAY)
153-
# This runs every day as a dependency of `pipeline`. A pipeline run is triggered when new weekly weights files are available.
164+
# This runs every day as a dependency of `pipeline`. A pipeline run is triggered when new weekly weights files are available.
154165
[ -f $(WEEKLY_WEIGHTS) ] || mkdir -p $(WEEKLY_WEIGHTS)
155166
cd "$(WEEKLY_WEIGHTS)"; \
156167
BATCH="cd fb-interchange/cmu_respondent_ww_weights\nls -1"; \
@@ -162,31 +173,25 @@ $(WEEKLY_WEIGHTS): $(TODAY)
162173
done; \
163174
sshpass -p $(DELPHI_SURVEY_SFTP_PASSWORD) sftp $(SFTP_OPTIONS) -b <(echo -e "$${BATCH}") -P 2222 $(DELPHI_SURVEY_SFTP_USER) || exit 90; \
164175
cd -; \
165-
# Expect weights for last week to be available if more than 3 days after the end of last week and output files for last week have not yet been created.
166-
if [[ $(TODAY) -gt (shell date -d "$(LAST_SATURDAY) +3 day" +"%Y-%m-%d") && -f $(LAST_SUNDAY)-weekly-weights.done ]]; then \
167-
# Get list of start dates (Sunday) of weekly weights files.
168-
MAX_WEEKLY_WEIGHTED=`$(MAX_WEEKLY_WEIGHTED)`; \
169-
EXPECTED_MAX_WEEKLY_WEIGHTED=$(LAST_SUNDAY); \
170-
if [[ $$EXPECTED_MAX_WEEKLY_WEIGHTED -gt $$MAX_WEEKLY_WEIGHTED ]]; then \
171-
MSG="Expected most recent weekly weights file to start on: $$EXPECTED_MAX_WEEKLY_WEIGHTED; Actual most recent file starts on: $$MAX_WEEKLY_WEIGHTED"; \
172-
echo "WARNING: $${MSG}" >> $(MESSAGES); \
173-
fi
174-
fi
175-
# If any new files are downloaded, run weekly weights pipeline for last week.
176-
if [[ (wc -w <<< $${NEW}) -gt 0 ]]; then \
177-
# The earliest new weekly weights file should be for last week.
178-
MIN_NEW_WEEKLY_WEIGHTED=grep map <<< $${NEW} | head -1 | sed 's/_.*//;s/-//g;'
179-
EXPECTED_NEW_WEEKLY_WEIGHTED=$(LAST_SUNDAY); \
180-
if [[ $$EXPECTED_NEW_WEEKLY_WEIGHTED -ne $$MIN_NEW_WEEKLY_WEIGHTED ]]; then \
181-
MSG="Expected new weekly weights file to start on: $$EXPECTED_NEW_WEEKLY_WEIGHTED; Actual new file starts on: $$MIN_NEW_WEEKLY_WEIGHTED"; \
182-
echo "WARNING: $${MSG}" >> $(MESSAGES); \
183-
fi
184-
# Save existing params file from normal daily run.
185-
if [ -f params.json ]; then cp params.json params.daily.json; fi
186-
$(MAKE) weekly-weights-pipeline
187-
rm -f params.json
188-
# Restore params file from normal daily run.
189-
mv params.daily.json params.json
176+
touch -d $(YESTERDAY) $(WEEKLY_WEIGHTS); \
177+
EXPECTED_WEEKLY_WEIGHTED=`date --date='$(LAST_SUNDAY)' +'%Y%m%d'`; \
178+
MIN_NEW_WEEKLY_WEIGHTED=`grep map <<< $${NEW} | head -1 | sed 's/_.*//;s/-//g;'`; \
179+
if [[ `wc -w <<< $${NEW}` -gt 0 ]] && [[ $$MIN_NEW_WEEKLY_WEIGHTED -ne $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
180+
MSG="Expected new weekly weights files to start on: $$EXPECTED_WEEKLY_WEIGHTED; Actual new files starts on: $$MIN_NEW_WEEKLY_WEIGHTED"; \
181+
echo "WARNING: $${MSG}" >> $(MESSAGES); \
182+
fi; \
183+
MAX_WEEKLY_WEIGHTED=`$(MAX_WEEKLY_WEIGHTED)`; \
184+
if [[ `date --date='$(TODAY)' +'%Y%m%d'` -gt `date --date='$(TUESDAY)' +'%Y%m%d'` ]] && [[ $$MAX_WEEKLY_WEIGHTED -lt $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
185+
MSG="Weekly weights are old; Expected most recent weekly weights file to start on: $$EXPECTED_WEEKLY_WEIGHTED; Actual most recent file starts on: $$MAX_WEEKLY_WEIGHTED"; \
186+
echo "WARNING: $${MSG}" >> $(MESSAGES); \
187+
fi; \
188+
if [[ ! -f tidy_weekly/$(LAST_SUNDAY)-weekly-weights.done ]] && [[ $$MAX_WEEKLY_WEIGHTED -eq $$EXPECTED_WEEKLY_WEIGHTED ]]; then \
189+
if [ -f params.json ]; then cp params.json params.daily.json; fi; \
190+
$(MAKE) weekly-weights-pipeline; \
191+
if [ -f params.daily.json ]; then \
192+
cp params.daily.json params.json; \
193+
rm -f params.daily.json; \
194+
fi; \
190195
fi
191196

192197
dev: delphiFacebook_1.0.tar.gz
@@ -202,17 +207,17 @@ run-R: $(CIDS) $(CIDS_EXP)
202207
grep "scheduled core" tmp ; \
203208
[ "$$?" -eq 1 ]
204209

205-
pipeline: scratch init-qualtrics params.json $(WEIGHTS) run-R post-cids post-experimental-cids post-individual post-individual-raceeth post-done tidy $(WEEKLY_WEIGHTS)
210+
pipeline: scratch init-qualtrics params.json $(WEIGHTS) run-R post-cids post-experimental-cids post-individual post-individual-raceeth post-done tidy_daily $(WEEKLY_WEIGHTS)
206211
grep $(TODAY) params.json
207212
[ -f $(YESTERDAY) ] && rm $(YESTERDAY) || true
208213
touch $@
209214
echo "SUCCESS: $(DRY_MESSAGE)pipeline complete" >> $(MESSAGES)
210215
chmod o+w $(MESSAGES)
211216

212-
weekly-weights-pipeline: scratch init-qualtrics params.weekly-weights.json run-R post-individual post-individual-raceeth tidy-weekly-weights
217+
weekly-weights-pipeline: scratch init-qualtrics params.weekly-weights.json run-R post-individual post-individual-raceeth tidy_weekly
213218
touch $@
214219
echo "SUCCESS: $(DRY_MESSAGE)completed weekly weights pipeline" >> $(MESSAGES)
215-
touch $(LAST_SUNDAY)-weekly-weights.done
220+
touch tidy_weekly/$(LAST_SUNDAY)-weekly-weights.done
216221

217222
coverage:
218223
Rscript -e 'covr::package_coverage("delphiFacebook")'

facebook/delphiFacebook/integration-tests/testthat/params-full.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"archive_dir": "./archive",
1010
"individual_dir": "./individual_full",
1111
"weights_in_dir": "./weights_full",
12-
"weekly_weights_in_dir": "./weights_full",
12+
"weekly_weights_in_dir": "./weights_full_weekly",
1313
"weights_out_dir": "./weights_out",
1414
"experimental_weights_out_dir": "./exp_weights_out",
1515
"input_dir": "./input",

facebook/delphiFacebook/integration-tests/testthat/params-test.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"archive_dir": "./archive",
1010
"individual_dir": "./individual",
1111
"weights_in_dir": "./weights_in",
12-
"weekly_weights_in_dir": "./weights_in",
12+
"weekly_weights_in_dir": "./weights_in_weekly",
1313
"weights_out_dir": "./weights_out",
1414
"experimental_weights_out_dir": "./exp_weights_out",
1515
"input_dir": "./input",

facebook/params.json.production.template

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,10 @@
5353
"weights_in_dir": "./fb-incoming",
5454
"weekly_weights_in_dir": "./fb-incoming-weekly",
5555
"weights_out_dir": "./fb-outgoing",
56-
"experimental_weights_out_dir": "./exp-fb-outgoing"
56+
"experimental_weights_out_dir": "./exp-fb-outgoing",
57+
"sftp_options": "",
58+
"delphi_survey_email_user": "",
59+
"delphi_survey_sftp_user": "",
60+
"delphi_survey_sftp_password": "",
61+
"parallel_max_cores": 1
5762
}

facebook/params.json.template

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"individual_raceeth_dir": "./individual_raceeth",
1212
"produce_individual_raceeth": false,
1313
"weights_in_dir": "./delphiFacebook/integration-tests/testthat/weights_full",
14-
"weekly_weights_in_dir": "./delphiFacebook/integration-tests/testthat/weights_full",
14+
"weekly_weights_in_dir": "./delphiFacebook/integration-tests/testthat/weights_full_weekly",
1515
"weights_out_dir": "./weights_out",
1616
"experimental_weights_out_dir": "./exp_weights_out",
1717
"input_dir": "./delphiFacebook/integration-tests/testthat/input",
@@ -34,5 +34,13 @@
3434
"full_synthetic.csv"
3535
],
3636
"aggregate_range": "month"
37+
},
38+
"sftp_options": "",
39+
"delphi_survey_email_user": "",
40+
"delphi_survey_sftp_user": "",
41+
"delphi_survey_sftp_password": "",
42+
"parallel_max_cores": 1,
43+
"qualtrics": {
44+
"notify-bad-weights": ""
3745
}
3846
}

0 commit comments

Comments
 (0)