/** * Tencent is pleased to support the open source community by making MSEC available. * * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the GNU General Public License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may * obtain a copy of the License at * * https://opensource.org/licenses/GPL-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ package beans.service; import beans.dbaccess.SecondLevelService; import beans.dbaccess.SecondLevelServiceConfigTag; import beans.request.AddSecondLevelServiceConfigTagRequest; import beans.response.AddSecondLevelServiceConfigTagResponse; import beans.response.AddSecondLevelServiceConfigTagResponse; import ngse.org.DBUtil; import ngse.org.JsonRPCHandler; import org.apache.log4j.Logger; import org.ini4j.Ini; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; /** * Created by Administrator on 2016/1/28. * 更新标准服务的配置信息,新增一个版本 */ public class AddSecondLevelServiceConfigTag extends JsonRPCHandler { private boolean SaveConfigContent(String filename, String content) { File file = new File(filename); file.delete(); try { file.createNewFile(); FileOutputStream out = new FileOutputStream(file); out.write(content.getBytes(Charset.forName("UTF-8"))); out.close(); return true; }catch (IOException e) { e.printStackTrace(); return false; } } private int getStandardServicePort(DBUtil util, String flsn, String slsn) throws Exception { Logger logger = Logger.getLogger(AddSecondLevelServiceConfigTag.class); String sql = "select port from t_second_level_service where first_level_service_name=? " + "and second_level_service_name=? and type='standard'"; List<Object> params = new ArrayList<>(); params.add(flsn); params.add(slsn); List<SecondLevelService> svcList = util.findMoreRefResult(sql, params, SecondLevelService.class); if (svcList == null || svcList.size() != 1) { throw new Exception("invalid record in t_second_level_service:" + flsn + "." + slsn); } return svcList.get(0).getPort(); } public void addPortConfig(String filename, int port) throws Exception { final String SECTION_NAME = "SRPC"; final String KEY = "listen"; //listen=e123/udp 234/tcp final String VALUE = String.format("%d/udp %d/tcp", port, port); Ini ini = new Ini(); ini.load(new File(filename)); Ini.Section section = ini.get(SECTION_NAME); boolean bChanged = false; if (section == null) { section = ini.add(SECTION_NAME); section.add(KEY, VALUE); bChanged = true; } else { String valueStr = section.get(KEY); if (valueStr == null) { section.add(KEY, VALUE); bChanged = true; } else { if (!valueStr.equalsIgnoreCase(VALUE)) { //logger.error("port config exists,but value mismatch!"+valueStr+"!="+VALUE); section.put(KEY, VALUE); bChanged = true; } } } if (bChanged) { ini.store(new File(filename)); } } public AddSecondLevelServiceConfigTagResponse exec(AddSecondLevelServiceConfigTagRequest request) { AddSecondLevelServiceConfigTagResponse response = new AddSecondLevelServiceConfigTagResponse(); response.setMessage("unkown error."); response.setStatus(100); String result = checkIdentity(); if (!result.equals("success")) { response.setStatus(99); response.setMessage(result); return response; } if (request.getTag_name() == null || request.getTag_name().equals("") || request.getFirst_level_service_name() == null || request.getFirst_level_service_name().length()<1|| request.getSecond_level_service_name() == null || request.getSecond_level_service_name().length()<1|| request.getContent() == null || request.getContent().length() < 1) { response.setMessage("Some request field is empty."); response.setStatus(100); return response; } DBUtil util = new DBUtil(); if (util.getConnection() == null) { response.setMessage("DB connect failed."); response.setStatus(100); return response; } try { //保存文件内容到服务器磁盘 String filename = SecondLevelServiceConfigTag.getConfigFileName(request.getFirst_level_service_name(), request.getSecond_level_service_name(), request.getTag_name()); if (!SaveConfigContent(filename, request.getContent()) ) { response.setMessage("save file failed."); response.setStatus(100); return response; } //写入端口配置信息 int port = getStandardServicePort(util, request.getFirst_level_service_name(), request.getSecond_level_service_name()); addPortConfig(filename, port); //插入数据库 String sql; List<Object> params = new ArrayList<Object>(); sql = "insert into t_config_tag(tag_name, memo, second_level_service_name,first_level_service_name) values(?,?,?,?)"; params.add(request.getTag_name()); if (request.getMemo() == null ){params.add("");}else{params.add(request.getMemo());} params.add(request.getSecond_level_service_name()); params.add(request.getFirst_level_service_name()); int addNum = util.updateByPreparedStatement(sql, params); if (addNum > 0) { response.setAddNumber(addNum); response.setMessage("success"); response.setStatus(0); return response; } else { response.setAddNumber(addNum); response.setMessage("failed to insert table"); response.setStatus(100); return response; } } catch (Exception e) { response.setMessage("add record failed:"+e.toString()); response.setStatus(100); e.printStackTrace(); return response; } finally { util.releaseConn(); } } }