Update project structure to org.onap
[dmaap/datarouter.git] / datarouter-prov / src / main / java / org / onap / dmaap / datarouter / provisioning / beans / LogRecord.java
1 /*******************************************************************************\r
2  * ============LICENSE_START==================================================\r
3  * * org.onap.dmaap\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
10  * * \r
11  *  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * * \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
19  * *\r
20  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 \r
24 \r
25 package org.onap.dmaap.datarouter.provisioning.beans;\r
26 \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.Statement;\r
34 import java.sql.Types;\r
35 import java.text.ParseException;\r
36 import java.util.Iterator;\r
37 \r
38 import org.onap.dmaap.datarouter.provisioning.utils.DB;\r
39 import org.onap.dmaap.datarouter.provisioning.utils.RLEBitSet;\r
40 \r
41 /**\r
42  * The representation of a Log Record, as retrieved from the DB.  Since this record format is only used\r
43  * to replicate 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
46  */\r
47 public class LogRecord extends BaseLogRecord {\r
48         /**\r
49          * Print all log records whose RECORD_IDs are in the bit set provided.\r
50          * @param os the {@link OutputStream} to print the records on\r
51          * @param bs the {@link RLEBitSet} listing the record IDs to print\r
52          * @throws IOException\r
53          */\r
54         public static void printLogRecords(OutputStream os, RLEBitSet bs) throws IOException {\r
55                 final String sql = "select * from LOG_RECORDS where RECORD_ID >= ? AND RECORD_ID <= ?";\r
56                 DB db = new DB();\r
57                 Connection conn = null;\r
58                 try {\r
59                         conn = db.getConnection();\r
60                         Statement stmt = conn.createStatement();\r
61                         Iterator<Long[]> iter = bs.getRangeIterator();\r
62                         PreparedStatement ps = conn.prepareStatement(sql);\r
63                         while (iter.hasNext()) {\r
64                                 Long[] n = iter.next();\r
65                                 ps.setLong(1, n[0]);\r
66                                 ps.setLong(2, n[1]);\r
67                                 ResultSet rs = ps.executeQuery();\r
68                                 while (rs.next()) {\r
69                                         LogRecord lr = new LogRecord(rs);\r
70                                         os.write(lr.toString().getBytes());\r
71                                 }\r
72                                 rs.close();\r
73                                 ps.clearParameters();\r
74                         }\r
75                         ps.close();\r
76                         stmt.close();\r
77                 } catch (SQLException e) {\r
78                         e.printStackTrace();\r
79                 } finally {\r
80                         if (conn != null)\r
81                                 db.release(conn);\r
82                 }\r
83         }\r
84 \r
85         private final String type;\r
86         private final String feedFileid;\r
87         private final String remoteAddr;\r
88         private final String user;\r
89         private final int status;\r
90         private final int subid;\r
91         private final String fileid;\r
92         private final int result;\r
93         private final int attempts;\r
94         private final String reason;\r
95         private final long record_id;\r
96         private final long clength2;\r
97 \r
98         public LogRecord(ResultSet rs) throws SQLException {\r
99                 super(rs);\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
105 \r
106                 this.subid      = rs.getInt("DELIVERY_SUBID");\r
107                 this.fileid     = rs.getString("DELIVERY_FILEID");\r
108                 this.result     = rs.getInt("RESULT");\r
109 \r
110                 this.attempts   = rs.getInt("ATTEMPTS");\r
111                 this.reason     = rs.getString("REASON");\r
112 \r
113                 this.record_id  = rs.getLong("RECORD_ID");\r
114                 this.clength2   = rs.getLong("CONTENT_LENGTH_2");\r
115         }\r
116         public LogRecord(String[] pp) throws ParseException {\r
117                 super(pp);\r
118                 this.type       = pp[8];\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
123 \r
124                 this.subid      = Integer.parseInt(pp[13]);\r
125                 this.fileid     = pp[14];\r
126                 this.result     = Integer.parseInt(pp[15]);\r
127 \r
128                 this.attempts   = Integer.parseInt(pp[16]);\r
129                 this.reason     = pp[17];\r
130 \r
131                 this.record_id  = Long.parseLong(pp[18]);\r
132                 this.clength2   = (pp.length == 20) ? Long.parseLong(pp[19]) : 0;\r
133         }\r
134 \r
135         public long getRecordId() {\r
136                 return record_id;\r
137         }\r
138 \r
139         @Override\r
140         public String toString() {\r
141                 return\r
142                         sdf.format(getEventTime()) + "|"\r
143                         + "LOG|"\r
144                         + getPublishId() + "|"\r
145                         + getFeedid() + "|"\r
146                         + getRequestUri() + "|"\r
147                         + getMethod() + "|"\r
148                         + getContentType() + "|"\r
149                         + getContentLength() + "|"\r
150                         + type + "|"\r
151                         + feedFileid + "|"\r
152                         + remoteAddr + "|"\r
153                         + user + "|"\r
154                         + status + "|"\r
155                         + subid + "|"\r
156                         + fileid + "|"\r
157                         + result + "|"\r
158                         + attempts + "|"\r
159                         + reason + "|"\r
160                         + record_id + "|"\r
161                         + clength2\r
162                         + "\n";\r
163         }\r
164 \r
165         @Override\r
166         public void load(PreparedStatement ps) throws SQLException {\r
167                 ps.setString(1, type);\r
168                 super.load(ps);                         // loads fields 2-8\r
169                 if (type.equals("pub")) {\r
170                         ps.setString(9,  feedFileid);\r
171                         ps.setString(10, remoteAddr);\r
172                         ps.setString(11, user);\r
173                         ps.setInt   (12, status);\r
174                         ps.setNull  (13, Types.INTEGER);\r
175                         ps.setNull  (14, Types.VARCHAR);\r
176                         ps.setNull  (15, Types.INTEGER);\r
177                         ps.setNull  (16, Types.INTEGER);\r
178                         ps.setNull  (17, Types.VARCHAR);\r
179                         ps.setLong  (18, record_id);\r
180                         ps.setNull  (19, Types.BIGINT);\r
181                 } else if (type.equals("del")) {\r
182                         ps.setNull  (9,  Types.VARCHAR);\r
183                         ps.setNull  (10, Types.VARCHAR);\r
184                         ps.setString(11, user);\r
185                         ps.setNull  (12, Types.INTEGER);\r
186                         ps.setInt   (13, subid);\r
187                         ps.setString(14, fileid);\r
188                         ps.setInt   (15, result);\r
189                         ps.setNull  (16, Types.INTEGER);\r
190                         ps.setNull  (17, Types.VARCHAR);\r
191                         ps.setLong  (18, record_id);\r
192                         ps.setNull  (19, Types.BIGINT);\r
193                 } else if (type.equals("exp")) {\r
194                         ps.setNull  (9,  Types.VARCHAR);\r
195                         ps.setNull  (10, Types.VARCHAR);\r
196                         ps.setNull  (11, Types.VARCHAR);\r
197                         ps.setNull  (12, Types.INTEGER);\r
198                         ps.setInt   (13, subid);\r
199                         ps.setString(14, fileid);\r
200                         ps.setNull  (15, Types.INTEGER);\r
201                         ps.setInt   (16, attempts);\r
202                         ps.setString(17, reason);\r
203                         ps.setLong  (18, record_id);\r
204                         ps.setNull  (19, Types.BIGINT);\r
205                 } else if (type.equals("pbf")) {\r
206                         ps.setString( 9, feedFileid);\r
207                         ps.setString(10, remoteAddr);\r
208                         ps.setString(11, user);\r
209                         ps.setNull  (12, Types.INTEGER);\r
210                         ps.setNull  (13, Types.INTEGER);\r
211                         ps.setNull  (14, Types.VARCHAR);\r
212                         ps.setNull  (15, Types.INTEGER);\r
213                         ps.setNull  (16, Types.INTEGER);\r
214                         ps.setNull  (17, Types.VARCHAR);\r
215                         ps.setLong  (18, record_id);\r
216                         ps.setLong  (19, clength2);\r
217                 } else if (type.equals("dlx")) {\r
218                         ps.setNull  ( 9, Types.VARCHAR);\r
219                         ps.setNull  (10, Types.VARCHAR);\r
220                         ps.setNull  (11, Types.VARCHAR);\r
221                         ps.setNull  (12, Types.INTEGER);\r
222                         ps.setInt   (13, subid);\r
223                         ps.setNull  (14, Types.VARCHAR);\r
224                         ps.setNull  (15, Types.INTEGER);\r
225                         ps.setNull  (16, Types.INTEGER);\r
226                         ps.setNull  (17, Types.VARCHAR);\r
227                         ps.setLong  (18, record_id);\r
228                         ps.setLong  (19, clength2);\r
229                 }\r
230         }\r
231 \r
232         public static void main(String[] a) throws IOException {\r
233                 LogRecord.printLogRecords(System.out, new RLEBitSet(a[0]));\r
234         }\r
235 }\r