| package config_parser |
| |
| import ( |
| "config" |
| "flag" |
| "fmt" |
| "privacy" |
| ) |
| |
| var privacyEncodingParamsFile = flag.String("privacy_encoding_params_file", "", "File containing precomputed privacy encoding parameters.") |
| |
| func PopulatePrivacyParams(configs []ProjectConfig) error { |
| if *privacyEncodingParamsFile == "" { |
| return fmt.Errorf("Missing required flag --privacy_encoding_params_file.") |
| } |
| |
| calc, err := privacy.NewPrivacyEncodingParamsCalculator(*privacyEncodingParamsFile) |
| if err != nil { |
| return err |
| } |
| |
| for _, c := range configs { |
| if err := populateParamsForConfig(calc, &c); err != nil { |
| return err |
| } |
| } |
| |
| return nil |
| } |
| |
| func populateParamsForConfig(calc *privacy.PrivacyEncodingParamsCalculator, c *ProjectConfig) error { |
| for _, metric := range c.ProjectConfig.MetricDefinitions { |
| if !Cobalt11MetricTypesSet[metric.MetricType] { |
| continue |
| } |
| for _, report := range metric.Reports { |
| if !Cobalt11ReportTypesSet[report.ReportType] { |
| continue |
| } |
| |
| err := populateParamsForReport(calc, metric, report) |
| if err != nil { |
| return err |
| } |
| } |
| } |
| return nil |
| } |
| |
| func populateParamsForReport(calc *privacy.PrivacyEncodingParamsCalculator, metric *config.MetricDefinition, report *config.ReportDefinition) (err error) { |
| if report.PrivacyLevel <= config.ReportDefinition_NO_ADDED_PRIVACY { |
| return nil |
| } |
| |
| params, err := calc.GetPrivacyEncodingParamsForReport(metric, report) |
| if err != nil { |
| return err |
| } |
| |
| report.ProbBitFlip = params.ProbBitFlip |
| report.NumIndexPoints = params.NumIndexPoints |
| |
| if report.ReportType == config.ReportDefinition_STRING_COUNTS { |
| err = populateParamsForStringReport(calc, report) |
| } |
| |
| return err |
| } |
| |
| func populateParamsForStringReport(calc *privacy.PrivacyEncodingParamsCalculator, report *config.ReportDefinition) (err error) { |
| report.StringSketchParams, err = calc.GetStringSketchParameters(report) |
| return err |
| } |