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
36 import org.apache.log4j.Logger;
\r
37 import org.onap.dmaap.datarouter.provisioning.utils.DB;
\r
38 import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet;
\r
41 * The representation of a Log Record, as retrieved from the DB. Since this record format is only used to replicate
\r
42 * between provisioning servers, it is very bare-bones; e.g. there are no field setters and only 1 getter.
\r
44 * @author Robert Eby
\r
45 * @version $Id: LogRecord.java,v 1.7 2014/03/12 19:45:41 eby Exp $
\r
47 public class LogRecord extends BaseLogRecord {
\r
50 * Print all log records whose RECORD_IDs are in the bit set provided.
\r
52 * @param os the {@link OutputStream} to print the records on
\r
53 * @param bs the {@link RLEBitSet} listing the record IDs to print
\r
54 * @throws IOException
\r
56 private static Logger intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.beans");
\r
58 public static void printLogRecords(OutputStream os, RLEBitSet bs) throws IOException {
\r
59 final String sql = "select * from LOG_RECORDS where RECORD_ID >= ? AND RECORD_ID <= ?";
\r
61 try (Connection conn = db.getConnection()) {
\r
62 Iterator<Long[]> iter = bs.getRangeIterator();
\r
63 try (PreparedStatement ps = conn.prepareStatement(sql)) {
\r
64 while (iter.hasNext()) {
\r
65 Long[] n = iter.next();
\r
66 ps.setLong(1, n[0]);
\r
67 ps.setLong(2, n[1]);
\r
68 try (ResultSet rs = ps.executeQuery()) {
\r
70 LogRecord lr = new LogRecord(rs);
\r
71 os.write(lr.toString().getBytes());
\r
73 ps.clearParameters();
\r
77 } catch (SQLException e) {
\r
78 intlogger.error("SQLException: " + e.getMessage());
\r
82 private final String type;
\r
83 private final String feedFileid;
\r
84 private final String remoteAddr;
\r
85 private final String user;
\r
86 private final int status;
\r
87 private final int subid;
\r
88 private final String fileid;
\r
89 private final int result;
\r
90 private final int attempts;
\r
91 private final String reason;
\r
92 private final long record_id;
\r
93 private final long clength2;
\r
94 private final String fileName;
\r
96 public LogRecord(ResultSet rs) throws SQLException {
\r
98 this.type = rs.getString("TYPE");
\r
99 this.feedFileid = rs.getString("FEED_FILEID");
\r
100 this.remoteAddr = rs.getString("REMOTE_ADDR");
\r
101 this.user = rs.getString("USER");
\r
102 this.status = rs.getInt("STATUS");
\r
104 this.subid = rs.getInt("DELIVERY_SUBID");
\r
105 this.fileid = rs.getString("DELIVERY_FILEID");
\r
106 this.result = rs.getInt("RESULT");
\r
108 this.attempts = rs.getInt("ATTEMPTS");
\r
109 this.reason = rs.getString("REASON");
\r
111 this.record_id = rs.getLong("RECORD_ID");
\r
112 this.clength2 = rs.getLong("CONTENT_LENGTH_2");
\r
113 this.fileName = rs.getString("FILENAME");
\r
116 public LogRecord(String[] pp) throws ParseException {
\r
119 this.feedFileid = pp[9];
\r
120 this.remoteAddr = pp[10];
\r
121 this.user = pp[11];
\r
122 this.status = Integer.parseInt(pp[12]);
\r
124 this.subid = Integer.parseInt(pp[13]);
\r
125 this.fileid = pp[14];
\r
126 this.result = Integer.parseInt(pp[15]);
\r
128 this.attempts = Integer.parseInt(pp[16]);
\r
129 this.reason = pp[17];
\r
131 this.record_id = Long.parseLong(pp[18]);
\r
132 this.clength2 = (pp.length == 21) ? Long.parseLong(pp[19]) : 0;
\r
133 this.fileName = pp[20];
\r
136 public long getRecordId() {
\r
141 public String toString() {
\r
143 sdf.format(getEventTime()) + "|"
\r
145 + getPublishId() + "|"
\r
146 + getFeedid() + "|"
\r
147 + getRequestUri() + "|"
\r
148 + getMethod() + "|"
\r
149 + getContentType() + "|"
\r
150 + getContentLength() + "|"
\r
167 public void load(PreparedStatement ps) throws SQLException {
\r
168 ps.setString(1, type);
\r
169 super.load(ps); // loads fields 2-8
\r
170 if (type.equals("pub")) {
\r
171 ps.setString(9, feedFileid);
\r
172 ps.setString(10, remoteAddr);
\r
173 ps.setString(11, user);
\r
174 ps.setInt(12, status);
\r
175 ps.setNull(13, Types.INTEGER);
\r
176 ps.setNull(14, Types.VARCHAR);
\r
177 ps.setNull(15, Types.INTEGER);
\r
178 ps.setNull(16, Types.INTEGER);
\r
179 ps.setNull(17, Types.VARCHAR);
\r
180 ps.setLong(18, record_id);
\r
181 ps.setNull(19, Types.BIGINT);
\r
182 ps.setString(20, fileName);
\r
183 } else if (type.equals("del")) {
\r
184 ps.setNull(9, Types.VARCHAR);
\r
185 ps.setNull(10, Types.VARCHAR);
\r
186 ps.setString(11, user);
\r
187 ps.setNull(12, Types.INTEGER);
\r
188 ps.setInt(13, subid);
\r
189 ps.setString(14, fileid);
\r
190 ps.setInt(15, result);
\r
191 ps.setNull(16, Types.INTEGER);
\r
192 ps.setNull(17, Types.VARCHAR);
\r
193 ps.setLong(18, record_id);
\r
194 ps.setNull(19, Types.BIGINT);
\r
195 ps.setString(20, fileName);
\r
196 } else if (type.equals("exp")) {
\r
197 ps.setNull(9, Types.VARCHAR);
\r
198 ps.setNull(10, Types.VARCHAR);
\r
199 ps.setNull(11, Types.VARCHAR);
\r
200 ps.setNull(12, Types.INTEGER);
\r
201 ps.setInt(13, subid);
\r
202 ps.setString(14, fileid);
\r
203 ps.setNull(15, Types.INTEGER);
\r
204 ps.setInt(16, attempts);
\r
205 ps.setString(17, reason);
\r
206 ps.setLong(18, record_id);
\r
207 ps.setNull(19, Types.BIGINT);
\r
208 ps.setString(20, fileName);
\r
209 } else if (type.equals("pbf")) {
\r
210 ps.setString(9, feedFileid);
\r
211 ps.setString(10, remoteAddr);
\r
212 ps.setString(11, user);
\r
213 ps.setNull(12, Types.INTEGER);
\r
214 ps.setNull(13, Types.INTEGER);
\r
215 ps.setNull(14, Types.VARCHAR);
\r
216 ps.setNull(15, Types.INTEGER);
\r
217 ps.setNull(16, Types.INTEGER);
\r
218 ps.setNull(17, Types.VARCHAR);
\r
219 ps.setLong(18, record_id);
\r
220 ps.setLong(19, clength2);
\r
221 ps.setString(20, fileName);
\r
222 } else if (type.equals("dlx")) {
\r
223 ps.setNull(9, Types.VARCHAR);
\r
224 ps.setNull(10, Types.VARCHAR);
\r
225 ps.setNull(11, Types.VARCHAR);
\r
226 ps.setNull(12, Types.INTEGER);
\r
227 ps.setInt(13, subid);
\r
228 ps.setNull(14, Types.VARCHAR);
\r
229 ps.setNull(15, Types.INTEGER);
\r
230 ps.setNull(16, Types.INTEGER);
\r
231 ps.setNull(17, Types.VARCHAR);
\r
232 ps.setLong(18, record_id);
\r
233 ps.setLong(19, clength2);
\r
234 ps.setString(20, fileName);
\r
238 public static void main(String[] a) throws IOException {
\r
239 LogRecord.printLogRecords(System.out, new RLEBitSet(a[0]));
\r