Chris_Miller
Jun 11, 2010Altostratus
Most efficient way to do if, else?
Good morning all,
This snippet is part of an http_response event. The rule compares the IP of the server responding to datagroups to see which pool the server is in. Based on that, the rule sets a cookie. I'm curious about the most efficient method to do this. I've read (but not completely understood) using switch, elseif, and glob are all options.
Here's what I have right now:
if { [matchclass [IP::server_addr] equals $::dg_pool_2A1] } {
set strPodNumber "2A1"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2A2] } {
set strPodNumber "2A2"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2B1] } {
set strPodNumber "2B1"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2B2] } {
set strPodNumber "2B2"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2C1] } {
set strPodNumber "2C1"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2C2] } {
set strPodNumber "2C2"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2D1] } {
set strPodNumber "2D1"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2D2] } {
set strPodNumber "2D2"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2E1] } {
set strPodNumber "2E1"
} elseif { [matchclass [IP::server_addr] equals $::dg_pool_2E2] } {
set strPodNumber "2E2"
}
Here's what I was thinking, with glob, but haven't validated will work:
switch -glob [matchclass[[IP::server_addr]] {
$::dg_pool2A1 {set strPodNumber "2A1"}
{$::dg_pool2A2 {set strPodNumber "2A2"}
{$::dg_pool2B1 {set strPodNumber "2B1"}
{$::dg_pool2B2 {set strPodNumber "2B2"}
{$::dg_pool2C1 {set strPodNumber "2C1"}
{$::dg_pool2C2 {set strPodNumber "2C2"}
{$::dg_pool2D1 {set strPodNumber "2D1"}
{$::dg_pool2D2 {set strPodNumber "2D2"}
{$::dg_pool2E1 {set strPodNumber "2E1"}
{$::dg_pool2E2 {set strPodNumber "2E2"}