1 /*******************************************************************************
\r
2 * ============LICENSE_START==================================================
\r
4 * * ===========================================================================
\r
5 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * * ===========================================================================
\r
7 * * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * * you may not use this file except in compliance with the License.
\r
9 * * You may obtain a copy of the License at
\r
11 * * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * * Unless required by applicable law or agreed to in writing, software
\r
14 * * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * * See the License for the specific language governing permissions and
\r
17 * * limitations under the License.
\r
18 * * ============LICENSE_END====================================================
\r
20 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
\r
22 ******************************************************************************/
\r
25 package org.onap.dmaap.datarouter.provisioning.beans;
\r
27 import java.io.IOException;
\r
28 import java.io.OutputStream;
\r
29 import java.sql.Connection;
\r
30 import java.sql.PreparedStatement;
\r
31 import java.sql.ResultSet;
\r
32 import java.sql.SQLException;
\r
33 import java.sql.Types;
\r
34 import java.text.ParseException;
\r
35 import java.util.Iterator;
\r
37 import com.att.eelf.configuration.EELFLogger;
\r
38 import com.att.eelf.configuration.EELFManager;
\r
39 import org.onap.dmaap.datarouter.provisioning.utils.DB;
\r
40 import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet;
\r
43 * The representation of a Log Record, as retrieved from the DB. Since this record format is only used to replicate
\r
44 * between provisioning servers, it is very bare-bones; e.g. there are no field setters and only 1 getter.
\r
46 * @author Robert Eby
\r
47 * @version $Id: LogRecord.java,v 1.7 2014/03/12 19:45:41 eby Exp $
\r
49 public class LogRecord extends BaseLogRecord {
\r
52 * Print all log records whose RECORD_IDs are in the bit set provided.
\r
54 * @param os the {@link OutputStream} to print the records on
\r
55 * @param bs the {@link RLEBitSet} listing the record IDs to print
\r
56 * @throws IOException
\r
58 private static EELFLogger intlogger = EELFManager.getInstance().getLogger("InternalLog");
\r
60 public static void printLogRecords(OutputStream os, RLEBitSet bs) throws IOException {
\r
61 final String sql = "select * from LOG_RECORDS where RECORD_ID >= ? AND RECORD_ID <= ?";
\r
63 try (Connection conn = db.getConnection()) {
\r
64 Iterator<Long[]> iter = bs.getRangeIterator();
\r
65 try (PreparedStatement ps = conn.prepareStatement(sql)) {
\r
66 while (iter.hasNext()) {
\r
67 Long[] n = iter.next();
\r
68 ps.setLong(1, n[0]);
\r
69 ps.setLong(2, n[1]);
\r
70 try (ResultSet rs = ps.executeQuery()) {
\r
72 LogRecord lr = new LogRecord(rs);
\r
73 os.write(lr.toString().getBytes());
\r
75 ps.clearParameters();
\r
79 } catch (SQLException e) {
\r
80 intlogger.error("SQLException: " + e.getMessage());
\r
84 private final String type;
\r
85 private final String feedFileid;
\r
86 private final String remoteAddr;
\r
87 private final String user;
\r
88 private final int status;
\r
89 private final int subid;
\r
90 private final String fileid;
\r
91 private final int result;
\r
92 private final int attempts;
\r
93 private final String reason;
\r
94 private final long record_id;
\r
95 private final long clength2;
\r
96 private final String fileName;
\r
98 public LogRecord(ResultSet rs) throws SQLException {
\r
100 this.type = rs.getString("TYPE");
\r
101 this.feedFileid = rs.getString("FEED_FILEID");
\r
102 this.remoteAddr = rs.getString("REMOTE_ADDR");
\r
103 this.user = rs.getString("USER");
\r
104 this.status = rs.getInt("STATUS");
\r
106 this.subid = rs.getInt("DELIVERY_SUBID");
\r
107 this.fileid = rs.getString("DELIVERY_FILEID");
\r
108 this.result = rs.getInt("RESULT");
\r
110 this.attempts = rs.getInt("ATTEMPTS");
\r
111 this.reason = rs.getString("REASON");
\r
113 this.record_id = rs.getLong("RECORD_ID");
\r
114 this.clength2 = rs.getLong("CONTENT_LENGTH_2");
\r
115 this.fileName = rs.getString("FILENAME");
\r
118 public LogRecord(String[] pp) throws ParseException {
\r
121 this.feedFileid = pp[9];
\r
122 this.remoteAddr = pp[10];
\r
123 this.user = pp[11];
\r
124 this.status = Integer.parseInt(pp[12]);
\r
126 this.subid = Integer.parseInt(pp[13]);
\r
127 this.fileid = pp[14];
\r
128 this.result = Integer.parseInt(pp[15]);
\r
130 this.attempts = Integer.parseInt(pp[16]);
\r
131 this.reason = pp[17];
\r
133 this.record_id = Long.parseLong(pp[18]);
\r
134 this.clength2 = (pp.length == 21) ? Long.parseLong(pp[19]) : 0;
\r
135 this.fileName = pp[20];
\r
138 public long getRecordId() {
\r
143 public String toString() {
\r
145 sdf.format(getEventTime()) + "|"
\r
147 + getPublishId() + "|"
\r
148 + getFeedid() + "|"
\r
149 + getRequestUri() + "|"
\r
150 + getMethod() + "|"
\r
151 + getContentType() + "|"
\r
152 + getContentLength() + "|"
\r
169 public void load(PreparedStatement ps) throws SQLException {
\r
170 ps.setString(1, type);
\r
171 super.load(ps); // loads fields 2-8
\r
172 if (type.equals("pub")) {
\r
173 ps.setString(9, feedFileid);
\r
174 ps.setString(10, remoteAddr);
\r
175 ps.setString(11, user);
\r
176 ps.setInt(12, status);
\r
177 ps.setNull(13, Types.INTEGER);
\r
178 ps.setNull(14, Types.VARCHAR);
\r
179 ps.setNull(15, Types.INTEGER);
\r
180 ps.setNull(16, Types.INTEGER);
\r
181 ps.setNull(17, Types.VARCHAR);
\r
182 ps.setLong(18, record_id);
\r
183 ps.setNull(19, Types.BIGINT);
\r
184 ps.setString(20, fileName);
\r
185 } else if (type.equals("del")) {
\r
186 ps.setNull(9, Types.VARCHAR);
\r
187 ps.setNull(10, Types.VARCHAR);
\r
188 ps.setString(11, user);
\r
189 ps.setNull(12, Types.INTEGER);
\r
190 ps.setInt(13, subid);
\r
191 ps.setString(14, fileid);
\r
192 ps.setInt(15, result);
\r
193 ps.setNull(16, Types.INTEGER);
\r
194 ps.setNull(17, Types.VARCHAR);
\r
195 ps.setLong(18, record_id);
\r
196 ps.setNull(19, Types.BIGINT);
\r
197 ps.setString(20, fileName);
\r
198 } else if (type.equals("exp")) {
\r
199 ps.setNull(9, Types.VARCHAR);
\r
200 ps.setNull(10, Types.VARCHAR);
\r
201 ps.setNull(11, Types.VARCHAR);
\r
202 ps.setNull(12, Types.INTEGER);
\r
203 ps.setInt(13, subid);
\r
204 ps.setString(14, fileid);
\r
205 ps.setNull(15, Types.INTEGER);
\r
206 ps.setInt(16, attempts);
\r
207 ps.setString(17, reason);
\r
208 ps.setLong(18, record_id);
\r
209 ps.setNull(19, Types.BIGINT);
\r
210 ps.setString(20, fileName);
\r
211 } else if (type.equals("pbf")) {
\r
212 ps.setString(9, feedFileid);
\r
213 ps.setString(10, remoteAddr);
\r
214 ps.setString(11, user);
\r
215 ps.setNull(12, Types.INTEGER);
\r
216 ps.setNull(13, Types.INTEGER);
\r
217 ps.setNull(14, Types.VARCHAR);
\r
218 ps.setNull(15, Types.INTEGER);
\r
219 ps.setNull(16, Types.INTEGER);
\r
220 ps.setNull(17, Types.VARCHAR);
\r
221 ps.setLong(18, record_id);
\r
222 ps.setLong(19, clength2);
\r
223 ps.setString(20, fileName);
\r
224 } else if (type.equals("dlx")) {
\r
225 ps.setNull(9, Types.VARCHAR);
\r
226 ps.setNull(10, Types.VARCHAR);
\r
227 ps.setNull(11, Types.VARCHAR);
\r
228 ps.setNull(12, Types.INTEGER);
\r
229 ps.setInt(13, subid);
\r
230 ps.setNull(14, Types.VARCHAR);
\r
231 ps.setNull(15, Types.INTEGER);
\r
232 ps.setNull(16, Types.INTEGER);
\r
233 ps.setNull(17, Types.VARCHAR);
\r
234 ps.setLong(18, record_id);
\r
235 ps.setLong(19, clength2);
\r
236 ps.setString(20, fileName);
\r
240 public static void main(String[] a) throws IOException {
\r
241 LogRecord.printLogRecords(System.out, new RLEBitSet(a[0]));
\r