Ignore:
Timestamp:
15/01/09 16:50:54 (11 years ago)
Author:
sdonegan
Message:

Updated to record search parameters and number of results into search log db via jdbc

Location:
TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/DBProperties.java

    r4795 r4817  
    22 
    33import java.io.IOException; 
     4import java.sql.Connection; 
     5import java.sql.DriverManager; 
     6import java.sql.Statement; 
    47import java.util.Properties; 
    58 
     
    1720     
    1821    private static Properties properties = null; 
     22    private static Properties propertiesSearchDb = null; 
    1923 
    2024        // info on the DB table structure 
     
    6165                        try  
    6266                        { 
    63                                 properties = ServiceProperties.getProperties(); 
     67                                properties = ServiceProperties.getProperties();                          
    6468                        }  
    6569                        catch (IOException e)  
     
    7579                 
    7680                logger.info("Using connection string: " + connectionString); 
    77                 InterfaceDBClient client =  
    78                         new PostgresDBClient(connectionString, userName, pw); 
     81                InterfaceDBClient client = new PostgresDBClient(connectionString, userName, pw); 
    7982                logger.info("DBClient set up for use with Discovery service."); 
    8083                return client; 
    8184        } 
     85         
     86        /** 
     87         * Prepare an INSERT sql statement from all supplied search parameters 
     88         *  
     89         * @param - updateString 
     90         *          
     91         * @return Boolean : whether db was updated (or not) 
     92         */      
     93        public static Boolean updateSearchParamLoggingDb (String updateString)throws DiscoveryDBException  
     94        { 
     95                                 
     96                Boolean update; 
     97                 
     98                logger.info("Setting up DBSearch Logging Client using config info from properties file..."); 
     99                if (propertiesSearchDb == null) 
     100                { 
     101                        try  
     102                        { 
     103                                propertiesSearchDb = ServiceProperties.getProperties();                          
     104                        }  
     105                        catch (IOException e)  
     106                        { 
     107                                logger.warn(e.getLocalizedMessage()); 
     108                                throw new DiscoveryDBException("Problem encountered whilst " + "setting up service config: " + e.getMessage()); 
     109                        } 
     110                } 
     111                 
     112                try {                    
     113                        // connect to logging db                         
     114                Properties props = new Properties(); 
     115                 
     116                props.setProperty("user", propertiesSearchDb.getProperty("jdbc.searchLoggingusername")); 
     117                props.setProperty("password", propertiesSearchDb.getProperty("jdbc.searchLoggingpassword"));             
     118                 
     119                Class.forName("org.postgresql.Driver").newInstance();           
     120                Connection con = DriverManager.getConnection(propertiesSearchDb.getProperty("jdbc.searchLoggingUri"), props);  
     121                Statement stmt = con.createStatement();                         
     122                stmt.executeUpdate(updateString);        
     123                 
     124                update = true; 
     125                 
     126                } catch (Exception E) { 
     127                         
     128                        logger.info("Could not Update search logger database!"); 
     129                        logger.error(E); 
     130                         
     131                        update = false; 
     132                } 
     133                 
     134                return update; 
     135        } 
    82136 
    83137} 
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/DiscoveryServiceSkeleton.java

    r4795 r4817  
    44package ndg.services.discovery; 
    55 
     6import java.util.HashMap; 
    67import java.util.Iterator; 
    78import java.util.Hashtable; 
    89import java.util.Vector; 
    910import org.apache.log4j.Logger; 
     11 
     12import com.sun.xml.bind.v2.TODO; 
     13 
    1014import ndg.common.discovery.Utilities; 
    1115 
     
    2226         
    2327        public static final String[] LIST_NAMES = { "presentFormatList", "orderByFieldList", "scopeList", "termTypeList", "spatialOperatorList" }; 
    24  
     28         
    2529        // Constants representing the possible, valid values for the various input list types 
    2630        public static final String FULL_TEXT_TERM_TYPE = "fullText"; 
     
    8993                logger.info(DELIMITER); 
    9094                 
     95                //generate a consistent ID for use within this session 
     96                final String thisSessionID = Utilities.generateSessionID();  
     97                 
    9198                discoveryserviceapi.DoSearchReturnDocument response = discoveryserviceapi.DoSearchReturnDocument.Factory.newInstance(); 
    9299                discoveryserviceapi.SearchReturnType responseContent = response.addNewDoSearchReturn(); 
     
    99106                        logger.info("Preparing search agent for search"); 
    100107                        SearchAgent agent = setupSearchAgent(request); 
    101  
     108                         
    102109                        logger.info("Running search..."); 
    103110                        myResult = agent.doSearch(); 
     111                         
     112                        Integer numRes = myResult.getHits(); 
     113                         
     114                         
     115                        //at this stage record all parameters in request passed from ws into searchlogging DB 
     116                         
     117                        //get sql insert statement based on input args           
     118                        String sqlInsertStmnt = recordSearchParamsToLog(request.getDoSearch(), numRes, thisSessionID); 
     119                         
     120                        logger.info("Tracking DB insert stmnt: " + sqlInsertStmnt); 
     121                         
     122                         
     123                        //execute statement to search logging database 
     124                        try { 
     125                                if (DBProperties.updateSearchParamLoggingDb(sqlInsertStmnt)) {                   
     126                                        logger.info("Have successfully updated search parameter logging database!");                     
     127                                } else { 
     128                                        logger.warn("Could not update search logging database!"); 
     129                                } 
     130                        } catch (DiscoveryDBException E) { 
     131                                logger.warn("Could not connect to and update search logging database!"); 
     132                        } 
     133                                                 
    104134                        logger.info("Search completed"); 
     135                         
    105136                } catch (Exception e) { 
    106137                        String errorMessage = "Unable to retrieve result - reason : " + e.getMessage(); 
     
    145176                } 
    146177 
    147                 logger.warn("doSearch() completed successfully you big arse"); 
     178                logger.warn("doSearch() completed successfully"); 
    148179 
    149180                return response; 
     
    162193                logger.info("Setting up search agent"); 
    163194                discoveryserviceapi.SearchType requestContent = request.getDoSearch(); 
     195                                 
    164196                SearchAgent agent = new SearchAgent(); 
    165197 
     
    238270                                throw new DiscoveryWSException(errorMessage); 
    239271                        } 
    240                 } 
    241  
     272                }                
     273                 
    242274                logger.info("Search agent ready for searching"); 
    243275                return agent; 
     
    430462                return response; 
    431463        } 
     464         
     465        /** 
     466         * Prepare an INSERT sql statement taking variables from available discoveryserviceapi.SearchType 
     467         *  
     468         * @param requestContent - discoveryserviceapi.SearchType 
     469         *          
     470         * @return String : sql insert statement 
     471         */ 
     472        public static String recordSearchParamsToLog(discoveryserviceapi.SearchType requestContentToLog, Integer numHits, String thisSessionID) { 
     473                 
     474                //extract from request content 
     475                logger.info("Constructing search DB logger sql update from requestContent"); 
     476                 
     477                //TODO: get originator IP and originating PORTAL IP              
     478                 
     479                //concatenate all scope into single comma separated string 
     480                String scopeString = ""; 
     481                if (requestContentToLog.sizeOfScopeArray() > 0) { 
     482                        for (int i = 0; i < requestContentToLog.sizeOfScopeArray(); i++) { 
     483                                if (i == 0){ 
     484                                        scopeString = (requestContentToLog.getScopeArray(i).toString()); 
     485                                } else { 
     486                                        scopeString = scopeString + "," + (requestContentToLog.getScopeArray(i).toString()); 
     487                                }                                
     488                        } 
     489                } else { 
     490                        scopeString = "null"; 
     491                } 
     492                 
     493                //check whether text term, spatial and temporal operators are available.. 
     494                String searchTxtTerm = ""; 
     495                if (Utilities.isStringDefined(requestContentToLog.getTerm())){ 
     496                        searchTxtTerm = "'" + requestContentToLog.getTerm() + "'"; 
     497                } else { 
     498                        searchTxtTerm = "null"; 
     499                } 
     500                 
     501                String dateRangeStart = ""; 
     502                String dateRangeEnd = "";                
     503                if (requestContentToLog.isSetDateRange()) { 
     504                        dateRangeStart = "'" + requestContentToLog.getDateRange().getDateRangeStart().toString() + "'"; 
     505                        dateRangeEnd = "'" + requestContentToLog.getDateRange().getDateRangeEnd().toString() + "'"; 
     506                } else { 
     507                        dateRangeStart = "null"; 
     508                        dateRangeEnd = "null"; 
     509                } 
     510                 
     511                String boundingBoxAsPolyString = ""; 
     512                if (requestContentToLog.isSetBoundingBox()) { 
     513                        boundingBoxAsPolyString = "'" + requestContentToLog.getBoundingBox().getLimitWest() + " " + requestContentToLog.getBoundingBox().getLimitNorth() + "," +   
     514                        requestContentToLog.getBoundingBox().getLimitEast() + " " + requestContentToLog.getBoundingBox().getLimitNorth() + "," + 
     515                        requestContentToLog.getBoundingBox().getLimitEast() + " " + requestContentToLog.getBoundingBox().getLimitSouth() + "," +  
     516                        requestContentToLog.getBoundingBox().getLimitWest() + " " + requestContentToLog.getBoundingBox().getLimitSouth() + "," +  
     517                        requestContentToLog.getBoundingBox().getLimitWest() + " " + requestContentToLog.getBoundingBox().getLimitNorth() + "'";  
     518                                                         
     519                } else { 
     520                        boundingBoxAsPolyString = "null"; 
     521                }                        
     522         
     523                String statementStringBuild = "insert into discoverySearchLogging(session_ID,search_term,start_time,end_time,date_of_search,scope,originator_IP,portal_IP,geographicExtent_As_Text, number_results_returned) " 
     524                        + "values (" 
     525                        + "'" + thisSessionID + "'" 
     526                        + "," 
     527                        + searchTxtTerm 
     528                        + "," 
     529                        + dateRangeStart 
     530                        + "," 
     531                        + dateRangeEnd 
     532                        + "," 
     533                        + "'" + Utilities.nowDateTime() + "'" 
     534                        + "," 
     535                        + "'" + scopeString + "'" 
     536                        + "," 
     537                        + "'originatorIP'" 
     538                        + "," 
     539                        + "'portalIP'" 
     540                        + "," 
     541                        + boundingBoxAsPolyString 
     542                        + "," 
     543                        + "'" + numHits.toString() + "'" 
     544                        + ");";  
     545                                 
     546                return statementStringBuild; 
     547        } 
    432548 
    433549} 
  • TI01-discovery/branches/ws-Discovery2-upgrade/src/ndg/services/discovery/SearchAgent.java

    r4795 r4817  
    139139        public Vector<String> getScopes() 
    140140        { 
     141                 
    141142                return this.scopes; 
    142143        } 
     
    315316                String sqlQuery = constructSearchQuery(); 
    316317                 
     318                logger.info("Search sql: " + sqlQuery); 
     319                 
    317320                // now run the query using the db client configured appropriately 
    318321                InterfaceDBClient client = DBProperties.setupDBClient(); 
     
    322325                // now extract the results data 
    323326                result = processResults(results); 
    324                          
     327                                 
    325328                return result; 
    326329        } 
     
    349352                                (results.length > this.getHowMany().intValue() ? 
    350353                                                this.getHowMany().intValue() : results.length); 
    351  
     354                                                 
    352355                        Vector<Hashtable<String, String>> documents = new Vector<Hashtable<String, String>>(); 
    353356                        // counter to ensure the proper number of hits are returned 
     
    401404        { 
    402405                logger.info("Creating search query"); 
     406                logger.info("search term detected is: " + this.term); 
    403407                 
    404408                // NB, we use the postgres text search function to do term searches 
Note: See TracChangeset for help on using the changeset viewer.