Commit 0624b82e authored by Andrea Sciaba's avatar Andrea Sciaba
Browse files

First version

parent e7ee8481
$WLCG_SERVICE->{'org.sam.CREAMCE-JobState'}->{parameter}->{"--add-wntar-nag-nosamcfg"} = 0;
$WLCG_SERVICE->{'org.sam.CREAMCE-JobState'}->{parameter}->{"--add-wntar-nag"} = "/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms";
$WLCG_SERVICE->{'org.sam.CE-JobState'}->{parameter}->{"--add-wntar-nag-nosamcfg"} = 0;
$WLCG_SERVICE->{'org.sam.CE-JobState'}->{parameter}->{"--add-wntar-nag"} = "/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms";
# Timeouts before a running or scheduling job is discarded
$WLCG_SERVICE->{'org.sam.CE-JobState'}->{parameter}->{"--timeout-wnjob-global"} = 1800;
$WLCG_SERVICE->{'org.sam.CE-JobState'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.CE-JobMonit'}->{parameter}->{"--timeout-job-schedrun"} = 82800;
$WLCG_SERVICE->{'org.sam.CE-JobMonit'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.CREAMCE-JobState'}->{parameter}->{"--timeout-wnjob-global"} = 1800;
$WLCG_SERVICE->{'org.sam.CREAMCE-JobState'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.CREAMCE-JobMonit'}->{parameter}->{"--timeout-job-schedrun"} = 82800;
$WLCG_SERVICE->{'org.sam.CREAMCE-JobMonit'}->{parameter}->{"--timeout-job-discard"} = 84600;
# SRM-All does a set of tests, and returns detailed results via Passive tests
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{native} = "Nagios";
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{config}->{path} = $NCG::NCG_PROBES_PATH_GRIDMON;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{config}->{interval} = 60;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{config}->{timeout} = 1800;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{config}->{retryInterval} = 5;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{config}->{maxCheckAttempts} = 1;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{probe} = 'org.cms/srmvometrics.py';
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{dependency}->{"hr.srce.SRM2-CertLifetime"} = 0;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{dependency}->{"hr.srce.GridProxy-Valid"} = 0;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{attribute}->{VONAME} = "--vo";
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{attribute}->{VO_FQAN} = "--vo-fqan";
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{attribute}->{X509_USER_PROXY} = "-x";
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{parameter}->{"-m"} = 'org.cms.SRM-AllCMS';
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{flags}->{NOLBNODE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{flags}->{NRPE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-AllCMS'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-GetPFNFromTFC'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOLsDir'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOPut'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOLs'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOGetTURLs'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VOGet'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{parent} = "org.cms.SRM-AllCMS";
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{metricset} = "org.cms.SRM";
$WLCG_SERVICE->{'org.cms.SRM-VODel'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#SRM";
# WN checks
# WN CMS
$WLCG_SERVICE->{'org.cms.WN-basic'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-basic'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-basic'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-basic'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-basic'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-basic'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-swinst'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_SERVICE->{'org.cms.WN-mc'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-mc'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-mc'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-mc'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-mc'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-mc'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_SERVICE->{'org.cms.WN-squid'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-squid'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-squid'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-squid'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-squid'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-squid'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-frontier'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.WN-analysis'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
# org.sam.CE-JobState : [active+passive] submits grid job to CE, holds a status of the grid job
$WLCG_SERVICE->{'org.sam.glexec.CE-JobState'}->{parameter}->{"--add-wntar-nag-nosamcfg"} = "";
$WLCG_SERVICE->{'org.sam.glexec.CE-JobState'}->{parameter}->{"--add-wntar-nag"} = "/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms.glexec";
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobState'}->{parameter}->{"--add-wntar-nag-nosamcfg"} = "";
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobState'}->{parameter}->{"--add-wntar-nag"} = "/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms.glexec";
# Timeouts before a running or scheduling job is discarded
$WLCG_SERVICE->{'org.sam.glexec.CE-JobState'}->{parameter}->{"--timeout-wnjob-global"} = 1800;
$WLCG_SERVICE->{'org.sam.glexec.CE-JobState'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.glexec.CE-JobMonit'}->{parameter}->{"--timeout-job-schedrun"} = 82800;
$WLCG_SERVICE->{'org.sam.glexec.CE-JobMonit'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobState'}->{parameter}->{"--timeout-wnjob-global"} = 1800;
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobState'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobMonit'}->{parameter}->{"--timeout-job-schedrun"} = 82800;
$WLCG_SERVICE->{'org.sam.glexec.CREAMCE-JobMonit'}->{parameter}->{"--timeout-job-discard"} = 84600;
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{flags}->{PASSIVE} = 1;
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{parent} = "org.sam.CE-JobState";
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{flags}->{VO} = 1;
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{flags}->{OBSESS} = 1;
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{metricset} = 'org.cms.WN';
$WLCG_SERVICE->{'org.cms.glexec.WN-gLExec'}->{docurl} = "https://twiki.cern.ch/twiki/bin/view/LCG/SAMProbesMetrics#WN";
$WLCG_NODETYPE->{CMS}->{CE} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-basic',
'org.cms.WN-swinst',
'org.cms.WN-squid',
'org.cms.WN-frontier',
'org.cms.WN-analysis'
];
$WLCG_NODETYPE->{CMS_PROD}->{CE} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-mc'
];
$WLCG_NODETYPE->{CMS}->{'OSG-CE'} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-basic',
'org.cms.WN-swinst',
'org.cms.WN-squid',
'org.cms.WN-frontier',
'org.cms.WN-analysis'
];
$WLCG_NODETYPE->{CMS_PROD}->{'OSG-CE'} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-mc'
];
$WLCG_NODETYPE->{CMS}->{'ARC-CE'} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-basic',
'org.cms.WN-swinst',
'org.cms.WN-squid',
'org.cms.WN-frontier',
'org.cms.WN-analysis'
];
$WLCG_NODETYPE->{CMS_PROD}->{'ARC-CE'} = [
'org.sam.CE-JobState',
'org.sam.CE-JobSubmit',
'org.cms.WN-mc'
];
$WLCG_NODETYPE->{CMS}->{'CREAM-CE'} = [
'org.sam.CREAMCE-JobState',
'org.sam.CREAMCE-JobSubmit',
'org.cms.WN-basic',
'org.cms.WN-swinst',
'org.cms.WN-squid',
'org.cms.WN-frontier',
'org.cms.WN-analysis'
];
$WLCG_NODETYPE->{CMS_PROD}->{'CREAM-CE'} = [
'org.sam.CREAMCE-JobState',
'org.sam.CREAMCE-JobSubmit',
'org.cms.WN-mc'
];
$WLCG_NODETYPE->{CMS_PROD}->{SRMv2} = [
#'hr.srce.SRM2-CertLifetime',
'org.cms.SRM-AllCMS',
'org.cms.SRM-GetPFNFromTFC',
'org.cms.SRM-VOLsDir',
'org.cms.SRM-VOPut',
'org.cms.SRM-VOLs',
'org.cms.SRM-VOGetTURLs',
'org.cms.SRM-VOGet',
'org.cms.SRM-VODel'
];
$WLCG_NODETYPE->{CMS_PROD}->{'OSG-SRMv2'} = [
#'hr.srce.SRM2-CertLifetime',
'org.cms.SRM-AllCMS',
'org.cms.SRM-GetPFNFromTFC',
'org.cms.SRM-VOLsDir',
'org.cms.SRM-VOPut',
'org.cms.SRM-VOLs',
'org.cms.SRM-VOGetTURLs',
'org.cms.SRM-VOGet',
'org.cms.SRM-VODel'
];
$WLCG_NODETYPE->{CMS_PILOT}->{CE} = [
'org.sam.glexec.CE-JobState',
'org.sam.glexec.CE-JobSubmit',
'org.cms.glexec.WN-gLExec'
];
$WLCG_NODETYPE->{CMS_PILOT}->{'CREAM-CE'} = [
'org.sam.glexec.CREAMCE-JobState',
'org.sam.glexec.CREAMCE-JobSubmit',
'org.cms.glexec.WN-gLExec'
];
$WLCG_NODETYPE->{CMS_PILOT}->{'OSG-CE'} = [
'org.sam.glexec.CE-JobState',
'org.sam.glexec.CE-JobSubmit',
'org.cms.glexec.WN-gLExec'
];
$WLCG_NODETYPE->{CMS_PILOT}->{'ARC-CE'} = [
'org.sam.glexec.CE-JobState',
'org.sam.glexec.CE-JobSubmit',
'org.cms.glexec.WN-gLExec'
];
$WLCG_NODETYPE->{CMS_T1ACCESS}->{"NAGIOS"} = [
'hr.srce.GridProxy-Valid',
'hr.srce.GridProxy-Get'
];
0 * * * * root PROXY=/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms.glexec/probes/org.cms.glexec/testjob/tests/payloadproxy-t1; /bin/cp -f /etc/nagios/globus/userproxy.pem--cms-Role_t1access $PROXY; /bin/chmod go+r $PROXY
0 * * * * root PROXY=/usr/libexec/grid-monitoring/probes/org.cms/wnjob/org.cms.glexec/probes/org.cms.glexec/testjob/tests/payloadproxy-t2; /bin/cp -f /etc/nagios/globus/userproxy.pem-cms $PROXY; /bin/chmod go+r $PROXY
define command{
command_name check_pyver
command_line $USER3$/org.sam/check_pyver $ARG1$
}
define command{
command_name samtest-run-file
command_line $USER3$/org.sam/samtest-run -w <wnjobWorkDir>/.gridprobes -f $ARG1$ -o "$ARG2$"
}
define command{
command_name check_wrap
command_line $USER3$/org.sam/check_wrap $ARG1$
}
define command{
command_name WN-probe
command_line $USER3$/org.sam/WN-probe $ARG1$
}
define command{
command_name WN-passive
command_line $USER1$/check_dummy
}
define command{
command_name samtest-run-sensor
command_line $USER3$/org.sam/samtest-run -w <wnjobWorkDir>/.gridprobes -d $USER3$/org.cms -s testjob -m $ARG1$
}
define service{
name sam-generic-wn
register 0
host_name <nodeName>
is_volatile 0
initial_state u
max_check_attempts 1
check_interval 60
retry_interval 1
active_checks_enabled 0
passive_checks_enabled 0
obsess_over_service 1
check_period 24x7
check_freshness 0
event_handler_enabled 0
flap_detection_enabled 0
process_perf_data 0
retain_status_information 1
retain_nonstatus_information 0
notifications_enabled 0
notification_interval 120
notification_period 24x7
contacts admin
contact_groups admins
_vo <VO>
_vo_fqan <VOMS>
_service_flavour CE
_server <nodeName>
_site_name <siteName>
_service_uri <ceName>
_metric_set org.sam.WN
notes <siteName> CE <ceName> <VO>
}
# active template
define service{
use sam-generic-wn
name sam-generic-wn-active
register 0
active_checks_enabled 1
passive_checks_enabled 0
}
# passive template
define service{
use sam-generic-wn
name sam-generic-wn-passive
register 0
check_command WN-passive
active_checks_enabled 0
passive_checks_enabled 1
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-basic-<VOMS>
check_command samtest-run-sensor!CE-cms-basic
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-frontier-<VOMS>
check_command samtest-run-sensor!CE-cms-frontier
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-squid-<VOMS>
check_command samtest-run-sensor!CE-cms-squid
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-swinst-<VOMS>
check_command samtest-run-sensor!CE-cms-swinst
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-mc-<VOMS>
check_command samtest-run-sensor!CE-cms-mc
}
define service {
use sam-generic-wn-active
service_description org.cms.WN-analysis-<VOMS>
check_command samtest-run-sensor!CE-cms-analysis
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment