Приветствую всех, а ниукого нет рабочего скрипта, на примере этого
Код:
import java.util.*;
import java.util.regex.*;
import java.text.*;
import java.sql.*;
import ru.bitel.bgbilling.common.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.server.ipn.*;
import bitel.billing.server.util.ssh.*;
import bitel.billing.server.util.*;
import bitel.billing.server.util.ssh.SSHSession;
protected void doSync()
{
host = gate.getHost();
port = gate.getPort();
gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );
String login = gateSetup.get( "login", "root" );
String pswd = gate.getKeyword();
if ( log.isDebugEnabled() )
{
log.debug( " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
}
session = null;
try
{
session = new SSHSessionExec( host, port, login, pswd );
address_list = session.command( "ip firewall address-list print without-paging" );
for ( UserStatus status : statusList )
{
new_address_list = null;
cid = status.contractId;
getNewRule(status);
ruleType = status.ruleType;
rule_id = 0;
if (ruleType != null)
{
rule_id = ruleType.getId();
};
rules = null;
if (address_list.indexOf( "cid="+cid+";rule_id="+rule_id+";") != -1)
{
// правило для этого договора есть на шлюзе
if ( status.status > 0 )
{
if ( status.status == IPNContractStatus.STATUS_REMOVED )
{
// удаляем
rules = getDeleteRules( status );
log.info("DeleteRules cid="+cid+" rule_id="+rule_id);
}
else
{
// закрываем
rules = getCloseRules( status );
log.info("CloseRules cid="+cid+" rule_id="+rule_id);
};
};
}
else if ( status.status == IPNContractStatus.STATUS_OPEN )
{
//открываем
rules = getOpenRules( status );
log.info("OpenRules cid="+cid+" rule_id="+rule_id);
};
if (rules != null)
{
for ( String rule : rules )
{
p = Pattern.compile("rule_id");
m = p.matcher(rule);
if (new_address_list == null)
{
new_address_list = "";
};
new_address_list = new_address_list + m.replaceAll("rule_id="+rule_id) + "\n";
};
};
if (new_address_list != null){
// print(address_list);
// print(new_address_list);
result = session.command(new_address_list);
// print(result);
};
};
}
catch( Exception e )
{
throw new RuntimeException( e );
}
finally
{
if ( session != null )
{
session.disconnect();
}
}
}
private getOpenRules( status )
{
return getRules( status, "\\[OPEN\\](.*)\\[/OPEN\\]" );
print("yes");
}
private getCloseRules( status )
{
return getRules( status, "\\[CLOSE\\](.*)\\[/CLOSE\\]" );
}
private getDeleteRules( status )
{
return getRules( status, "\\[DELETE\\](.*)\\[/DELETE\\]" );
}
private getRules( status, template )
{
// пользовательское правило, без типа - то все оставляем как есть
rule = status.rule.getRuleText();
// типизированное правило
if ( status.ruleType != null )
{
rule = generateRule( rule, status.gateType, status.ruleType, status.contractId );
}
pattern = Pattern.compile( template, Pattern.DOTALL );
m = pattern.matcher( rule );
if ( m.find() )
{
rule = m.group( 1 );
}
rule.replaceAll( "\r", "" );
return rule.split( "\n" );
}
private generateRule( addresses, gateType, ruleType, cid )
{
String rule;
replacements = new HashMap();
replacements.put( "\\{CID\\}", String.valueOf( cid ) );
ruleText = ManadUtils.getRule( gateType, ruleType );
rule = ManadUtils.generateRule( ruleText, addresses, replacements, ruleType );
return rule;
}
private getNewRule(status)
{
if (status.ruleType == null){
return;
};
H = new Hashtable();
H.put("operation", "get_ipn_rule_id");
H.put("cid", status.contractId);
H.put("mid", status.mid);
H.put("sid", 5);
H.put("time", new GregorianCalendar());
ParseTarif(H);
rule_id = H.get("rule_id");
if (rule_id != null)
{
rule_type_manager = new RuleTypeManager(con,status.mid);
status.ruleType = rule_type_manager.getType(Integer.parseInt(rule_id));
};
}
private ParseTarif(H)
{
H.put("is_found", false);
cid = H.get("cid");
if (cid == null)
{
return;
};
time = H.get("time");
if (time == null)
{
return;
};
formatter = new SimpleDateFormat("yyyy-MM-dd");
tarif_date = formatter.format(time.getTime()).toString();
query = "SELECT contract_tree_link.tree_id "+
"FROM contract_tree_link "+
"WHERE "+
"(contract_tree_link.date1 is NULL OR contract_tree_link.date1<='"+tarif_date+"') AND "+
"(contract_tree_link.date2 is NULL OR contract_tree_link.date2>='"+tarif_date+"') AND "+
"contract_tree_link.cid='"+cid+"' "+
"UNION "+
"SELECT tariff_tree_link.tree_id "+
"FROM contract_tariff "+
" INNER JOIN tariff_tree_link "+
" ON (contract_tariff.tpid=tariff_tree_link.tpid) "+
"WHERE (contract_tariff.date1 is NULL OR contract_tariff.date1<='"+tarif_date+"') AND "+
"(contract_tariff.date2 is NULL OR contract_tariff.date2>='"+tarif_date+"') AND "+
"contract_tariff.cid='"+cid+"'";
re = con.prepareStatement(query);
rs = re.executeQuery();
while (rs.next())
{
tree_id = rs.getString(1);
ParseMTree(tree_id,H);
};
}
private ParseMTree(tree_id,H)
{
is_found = H.get("is_found");
if (is_found == null)
{
return;
};
if (is_found)
{
return;
};
mid = H.get("mid");
if (mid == null)
{
return;
};
query = "SELECT mtree_node.id "+
"FROM module_tariff_tree "+
" INNER JOIN mtree_node "+
" ON (module_tariff_tree.id=mtree_node.mtree_id) "+
"WHERE mtree_node.type='root' AND module_tariff_tree.tree_id='"+tree_id+"' AND module_tariff_tree.mid='"+mid+"'";
re = con.prepareStatement(query);
rs = re.executeQuery();
while (rs.next())
{
node_id = rs.getString(1);
ParseNode(node_id,H);
};
}
private ParseNode(node_id,H)
{
is_found = H.get("is_found");
if (is_found == null)
{
return;
};
if (is_found)
{
return;
};
sid = H.get("sid");
if (sid == null)
{
return;
};
operation = H.get("operation");
if (operation == null)
{
return;
};
time = H.get("time");
if (time == null)
{
return;
};
query = "SELECT id, type, data FROM mtree_node WHERE parent_node='"+node_id+"'";
re = con.prepareStatement(query);
rs = re.executeQuery();
while (rs.next())
{
id = rs.getString(1);
type = rs.getString(2);
data = rs.getString(3);
if (type.equals("service") && sid != Integer.parseInt(data))
{
continue;
};
if (type.equals("ipn_rule") && operation.equals("get_ipn_rule_id"))
{
datas = data.split ("&");
H.put("rule_id",datas[1]);
H.put("is_found",true);
};
if (type.equals("period"))
{
datas = data.split ("%");
date1 = null;
date2 = null;
for (i=0; i<datas.length; i++)
{
date_arr = datas[i].split("&");
if (date_arr.length != 2)
{
continue;
};
formatter = new SimpleDateFormat("dd.MM.yyyy");
date = formatter.parse(date_arr[1]);
if (date_arr[0].equals("date1"))
{
date1 = date;
};
if (date_arr[0].equals("date2"))
{
date2 = date;
};
};
if (date1 != null && date1.compareTo(time.getTime()) != -1){
continue;
};
if (date2 != null && date2.compareTo(time.getTime()) != 1){
continue;
};
};
ParseNode(id,H);
};
};
Который плюс ещё ковсему будет брать влан с договора и подставлять в команды
Код:
/interface vlan
add interface=bridge1 name=vlan_4 vlan-id=4
/ip pool
add name=dhcp_pool4 ranges=10.50.20.4
/ip dhcp-server
add address-pool=dhcp_pool4 disabled=no interface=vlan_4 lease-time=10m name=dhcp_4
/ip address
add address=10.50.20.1/24 interface=vlan_4
/ip dhcp-server network
add address=10.50.20.0/24 dns-server=10.50.20.1 gateway=10.50.20.1
/ip route
add distance=1 dst-address=10.50.20.3/32 gateway=vlan_4
А для изменения данных
Код:
/ip pool set [find name=dhcp_pool4] ranges=10.50.20.2
где вместо 4 будет подставлять номер влана, например dhcp_pool100 и при следующем запросе адреса абоненту будет выдан уже другой.ч
_________________
Код:
Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegramСтиль программирования - пьяный мастерстер
Разработка мобильных приложений