blob: 75c585ace10dc4924c42c5529e0c40a19bfc7879 [file] [log] [blame]
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
}