SAP login / logout time
Hi,
I want to find out how many times a user a logged into SAP system (lets say dev) and for each log in what was the login and log out time. Pls let me know how to achive this.
Regards
Vimal
Check the Following Link Check how many times a user login to sap system
Kanagaraja L
Similar Messages
-
How to get users' login logout time for user IDs for a specific date?
Dear All,
There is a case I being requested to retrieve the Userid, User Name,
User Group, User Dept, Date, Login Time, Logout Time in a specific date, for example, 21.05.2009.
How should I retrieve the information? The user want to input specific date and user group then return the details that mentioned above.
I try with SUIM->Users->By Logon Date and Password Change... but I can't specific the date that I want ...
I try with SM19 (Security Audit Log), but unfortunately in my system this is not activated.
I've seek for SAP's advise, and they say need to ask abaper to developr a report in order to get such details....
Do you guys have any other methods?
Do you guys know which tables will contain the details as mentioned above?
Best Regards,
KenUnfortunately without the audit log, you're going have a hard time finding this information. As mentioned, ST03N will give you some information. If your systems daily workload aggregation goes back to the date you require then you'll be able to get a list of all users who logged on that day. ST03N doesn't keep time stamps just response times.
My only idea is VERY labor intensive. If your DB admin can retrieve a save of the database from that day then table USR02 will hold a little more information for you. It will contain last login times for that day. If your system backup policy happened to have saved the contents of folder "/usr/sap/<SID>/<instance>/data" then you potentially have access to all the data you require. The stat file will have recorded every transaction that took place during that day. If that file is restored you could use program RSSTAT20 to query against it.
Good luck and turn on the audit log as it makes your life much easier! -
Report for login and logout time
Dear All,
Please can some one help me urgently.
I have to find out users login and logout time over the last six months. I need to find out how many hours per user are being used. What report do I need to run to find out ?Hi,
Check the system log saved in your system.Normally the basis admin woulfd know better about this .Only they have the access and maintance for it.
Anyways u can try out some other ways also
Profile parameters rslg/local/file
/usr/sap/<SID>/D20/log/SLOG<SAP-instance_number> Specifies the location of the local log on the application server.
Alternatively try to table - SYST
Note: there are many transaction codes that can be accessed only by super users .do tell me if u have one so that i can give you? -
How to track the login time and logout times of clients
hai
please give me the solution
suppose there are 5 systems connected in LAN.
how to track the login time and logout times of clients
for a given time(may be one day or 1 hour) using any programming language.
please give me the solutionWhen the client logs in you write the client's ID and the current time to a database. Likewise when the client logs out. Assuming of course that you have a program that knows when those events occur.
-
Login Date/time & Logout Date/time of User in apex
Hi,
Is there any apex internal table/view where I can get the Login Date/time & Logout Date/time per user ?
Regards,
BenzBenz wrote:
Is there any apex internal table/view where I can get the Login Date/time & Logout Date/time per user ?No APEX version = no definitive answer...
APEX 4.1 offers:
<li><tt>APEX_WORKSPACE_ACTIVITY_LOG</tt>
<li><tt>APEX_WORKSPACE_ACCESS_LOG</tt>
Access these through Home > Application Builder > Application > Utilities > Application Express Views
See: Creating Custom Activity Reports Using APEX_ACTIVITY_LOG
Note that the underlying logs are purged on a regular basis, so for the long term you need to copy the data to your own tables.
Home > Administration > Monitor Activity provides reports based on this data.
APEX 3.0 has Home> Application Builder > Application > Application Reports > Activity > Page Views by Session which is probably closest to what you're looking for. Can't find this so far in APEX 4.x: presumably superseded by the Home > Administration > Monitor Activity > Page Views > By Interactive Report option?
Note however that the concensus among the wise is that accurate "logout" statistics with APEX (or any browser-based system) is impossible. How many users actually logout using using a method that triggers a capturable event at the actual time they stop using the system? How many are going to close the current browser tab? Or the entire browser window? Or press Cmd-Q? Or click a bookmark for a different location? Or type "p0rn" into the Search box? Or switch to another window and spend the rest of the morning reading Twitter? Or shutdown the machine? Or run out of battery power? Or lose their wifi connection? Or get timed-out during the fire drill? Or go home for the night after locking their PC with everything still running? Or... -
Sql query to find activities between Login and Logout time
Hi ,
I have 2 tables as shown below
User Table
ActivityTable
i have a requirement in which i need to find all the activities done for a particular user inbetween login and logout time can anybody help me how to write sql query for this .Is this what you looking for?
DECLARE @User TABLE
userid INT,
date DATETIME,
type VARCHAR(50),
sessionid SMALLINT
DECLARE @ActivityTable TABLE
activityid SMALLINT,
userid SMALLINT,
activity VARCHAR(50),
activitystarttime DATETIME,
activityendtime DATETIME
INSERT INTO @User
(userid,
[date],
[type],
sessionid)
VALUES (1,
'2002-08-25 16:51:25.107',
'Logon',
111),
(1,
'2002-08-25 17:52:25.107',
'LOGOFF',
111),
(2,
'2007-03-08 19:25:21.170',
'Logon',
222),
(2,
'2007-03-08 21:25:21.170',
'LOGOFF',
222),
(3,
'2007-03-08 19:25:21.170',
'Logon',
234);
INSERT INTO @ActivityTable
(activityid,
userid,
activity,
activitystarttime,
activityendtime)
VALUES (234,
1,
'development',
'2002-08-25 16:53:23.101',
'2002-08-25 16:59:23.170'),
(789,
2,
'Testing',
'2007-03-08 19:53:23.180',
'2007-03-08 20:53:23.180'),
(789,
2,
'Lunch',
'2007-03-08 19:53:23.180',
'2007-03-08 20:53:23.180'),
(456,
3,
'Testing',
'2007-03-08 19:53:23.180',
'2007-03-08 20:53:23.180'),
(781,
1,
'Lunch',
'2002-08-25 17:00:23.101',
'2002-08-25 17:30:00.170'),
(781,
1,
'Lunch',
'2002-08-25 21:00:23.101',
'2002-08-25 22:30:00.170');
WITH logon
AS (SELECT date,
userid
FROM @User
WHERE type = 'Logon'),
logoff
AS (SELECT date,
userid
FROM @User
WHERE type = 'LOGOFF')
SELECT at.*
FROM @ActivityTable AT
INNER JOIN logon Lo
ON at.userid = lo.userid
INNER JOIN logoff LF
ON at.userid = lf.userid
WHERE At.activityendtime < LF.date
AND AT.activitystarttime > LO.date
Regards,
Vishal Patel
Blog: http://vspatel.co.uk
Site: http://lehrity.com -
Calculating Login and Logout Times - need help
Hi everyone. I have the first part of this code and can't seem to figure out the time calculation part. What it is - create a code that asks for a user name or social security number, then the person enters up to 6 login and logout times for the day. They also have the option to enter personal time or sick time (neither of which can be over 8 hours). I have all of that complete, but I can't figure out how to get the in and out times and the leave times to calculate. I have 3 pieces of code - here they are:
Hours:
import java.util.*;
public class Hours
//define states of Hours
int regularhoursInt = 0;
int regularminutesInt = 0;
int overtimehoursInt = 0;
int overtimeminutesInt = 0;
//set hours worked
public void setHours(int timein, int timeout)
int temphoursin = timein/100;
int tempminutesin = timein - timein/100;
int temphoursout = timeout/100;
int tempminutesout = timeout - timeout/100;
GregorianCalendar time1 = new GregorianCalendar(2003, 8, 1, temphoursin, tempminutesin, 0);
GregorianCalendar time2 = new GregorianCalendar(2003, 8, 1, temphoursout, tempminutesout, 0);
//store to date
Date d1 = time1.getTime();
Date d2 = time2.getTime();
//store time to long
long t1 = d1.getTime();
long t2 = d2.getTime();
//subtract and convert to seconds
long time = (t2 - t1)/1000;
long tempregularLong = 0;
long tempovertimeLong = 0;
//see if regular hours are over 8 hours (28800 seconds)
tempregularLong = time;
if (tempregularLong > 28800)
tempovertimeLong = tempregularLong - 28800;
tempregularLong = tempregularLong - tempovertimeLong;
//convert to hours and minutes
regularhoursInt = regularhoursInt + (Integer.parseInt(Long.toString(tempregularLong)) / 3600);
regularminutesInt = regularminutesInt + (Integer.parseInt(Long.toString(tempregularLong)) / (3600 * regularhoursInt));
overtimehoursInt = overtimehoursInt + (Integer.parseInt(Long.toString(tempovertimeLong)) / 3600);
overtimeminutesInt = overtimeminutesInt + (Integer.parseInt(Long.toString(tempovertimeLong)) / (3600 * regularhoursInt)); }
// get regular hours worked
public int getRegularHours()
return regularhoursInt;
// get regular minutes worked
public int getRegularMinutes()
return regularminutesInt;
//get overtime hours worked
public int getOvertimeHours()
return overtimehoursInt;
// get overtime minutes worked
public int getOvertimeMinutes()
return overtimeminutesInt;
Employee:
public class Employee
//define states of employee
String nameString = "";
String ssnString = "";
double payrateDouble = 0;
double hoursworkedDouble = 0;
double overtimehoursDouble = 0;
double sickleaveDouble = 0;
double personalleaveDouble = 0;
double totalpayDouble = 0;
//set and get employee name
public void setName(String name)
nameString = name;
public String getName()
return nameString;
//set and get employee ssn
public void setSsn(String ssn)
ssnString = ssn;
public String getSsn()
return ssnString;
//set and get employee payrate
public void setPayRate(double payrate)
payrateDouble = payrate;
public double getPayRate()
return payrateDouble;
//set and get employee hours worked
public void setHoursWorked(double hoursworked)
hoursworkedDouble = hoursworked;
public double getHoursWorked()
return hoursworkedDouble;
//set and get employee overtimehours
public void setOverTime(double overtime)
overtimehoursDouble = overtime;
public double getOverTime()
return overtimehoursDouble;
//set and get employee sick leave hours
public void setSickLeave(double sickleave)
sickleaveDouble = sickleave;
public double getSickLeave()
return sickleaveDouble;
//set and get employee sick leave hours
public void setPersonalLeave(double personalleave)
personalleaveDouble = personalleave;
public double getPersonalLeave()
return personalleaveDouble;
//get employees total pay
public double getTotalPay()
//calculate regular pay
totalpayDouble = payrateDouble * hoursworkedDouble;
//add in any over time pay
totalpayDouble = totalpayDouble + payrateDouble * 1.5 * overtimehoursDouble;
//add in any sick time pay
totalpayDouble = totalpayDouble + payrateDouble * sickleaveDouble;
//add in any personal leave time pay
totalpayDouble = totalpayDouble + payrateDouble * personalleaveDouble;
return totalpayDouble;
Entry Screen:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import javax.swing.*;
import java.util.*;
import java.text.*;
//create entryscreen class as a java applet
public class EntryScreen extends Applet implements ActionListener
//declare all variables, labels, textfields, and buttons
//store pay rate to variable payrateDouble
double payrateDouble = 10.00;
//store ssn and names to ssnString
String[][] ssnString ={{"123121234", "234232345", "345343456", "456454567",
"567565678", "678676789"},{"Jane Doe", "John Doe", "Sam Smith", "Tom Thumb", "Sara Jane", "Cindy Thompson"}};
//set date format to MM/dd/yy and store in variable formatter
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy");
//store current date to variable date
Date date = new Date();
//using variable formatter store current date to dateString
String dateString = formatter.format(date);
//declare all label, Textfields and buttons use in the applet
JLabel titleLabel;
JLabel dateLabel;
JTextField dateTextField;
JLabel ssnLabel;
JTextField ssnTextField;
JLabel timeLabel;
JLabel inLabel;
JLabel outLabel;
JTextField in1TextField;
JTextField in2TextField;
JTextField in3TextField;
JTextField in4TextField;
JTextField in5TextField;
JTextField in6TextField;
JTextField out1TextField;
JTextField out2TextField;
JTextField out3TextField;
JTextField out4TextField;
JTextField out5TextField;
JTextField out6TextField;
JLabel sickLabel;
JTextField sickTextField;
JTextField personalTextField;
JLabel personalLabel;
JButton okButton;
JButton clearButton;
JLabel day1Label;
JLabel day2Label;
JLabel day3Label;
JLabel day4Label;
JLabel day5Label;
JLabel day6Label;
//initialize the applet screen
public void init()
//create a custom layout object based on the EntryScreenLayout class
EntryScreenLayout customLayout = new EntryScreenLayout();
//set the font for the screen
setFont(new Font("Helvetica", Font.PLAIN, 12));
setLayout(customLayout);
//populate the applet with the labels, textfields, and buttons
titleLabel = new JLabel("Employee Payroll System");
add(titleLabel);
dateLabel = new JLabel("Date (MM/DD/YY):");
add(dateLabel);
dateTextField = new JTextField("");
add(dateTextField);
//set text in field to current date
dateTextField.setText(dateString);
ssnLabel = new JLabel("SSN (Numbers Only):");
add(ssnLabel);
ssnTextField = new JTextField("");
add(ssnTextField);
timeLabel = new JLabel("Hours Worked (hhmm)");
add(timeLabel);
inLabel = new JLabel("In:");
add(inLabel);
outLabel = new JLabel("Out");
add(outLabel);
in1TextField = new JTextField("");
add(in1TextField);
in2TextField = new JTextField("");
add(in2TextField);
in3TextField = new JTextField("");
add(in3TextField);
in4TextField = new JTextField("");
add(in4TextField);
in5TextField = new JTextField("");
add(in5TextField);
in6TextField = new JTextField("");
add(in6TextField);
out1TextField = new JTextField("");
add(out1TextField);
out2TextField = new JTextField("");
add(out2TextField);
out3TextField = new JTextField("");
add(out3TextField);
out4TextField = new JTextField("");
add(out4TextField);
out5TextField = new JTextField("");
add(out5TextField);
out6TextField = new JTextField("");
add(out6TextField);
sickLabel = new JLabel("Sick Leave Used:");
add(sickLabel);
sickTextField = new JTextField("");
add(sickTextField);
personalTextField = new JTextField("");
add(personalTextField);
personalLabel = new JLabel("Personal Leave Used:");
add(personalLabel);
okButton = new JButton("Ok");
add(okButton);
okButton.addActionListener(this);
clearButton = new JButton("Clear");
add(clearButton);
clearButton.addActionListener(this);
day1Label = new JLabel("Day 1:");
add(day1Label);
day2Label = new JLabel("Day 2:");
add(day2Label);
day3Label = new JLabel("Day 3:");
add(day3Label);
day4Label = new JLabel("Day 4:");
add(day4Label);
day5Label = new JLabel("Day 5:");
add(day5Label);
day6Label = new JLabel("Day 6:");
add(day6Label);
//set the size of the applet window as listed in the EntryScreenLayout class
setSize(getPreferredSize());
public void actionPerformed(ActionEvent e)
//get the source object
Object source = e.getSource();
//perform if OK button was presses
if(source == okButton)
int[][] inouttimes = new int[1][5];
boolean matchBoolean = false;
boolean timeError = false;
int locationInt = 0;
double[] leavehours = new double[1];
String messageString = "";
//get the text from the ssnTextField and store to inputString
String inputString = ssnTextField.getText();
//check to see if inputString matches ssnString array
for(int i = 0; i < 6; ++i)
//if a match assign variables
if (inputString.equals(ssnString[0]))
matchBoolean = true;
locationInt = i;
break;
//if not a match
else
matchBoolean = false;
}//end for i
//if a SSN match is true than display the name, SSN, total hours, overtime hours, and total pay for hours worked.
if (matchBoolean == true)
//get the check in/out times, if blank assign a zero
Employee temp = new Employee();
temp.setName(ssnString[1][locationInt]);
temp.setSsn(ssnString[0][locationInt]);
temp.setPayRate(payrateDouble);
temp.setSickLeave(Double.parseDouble(sickTextField.getText()));
temp.setPersonalLeave(Double.parseDouble(personalTextField.getText()));
/*inouttimes[0][0] = Integer.parseInt(in1TextField.getText());
inouttimes[1][0] = Integer.parseInt(out1TextField.getText();
inouttimes[0][1] = Integer.parseInt(in2TextField.getText();
inouttimes[1][1] = Integer.parseInt(out2TextField.getText();
inouttimes[0][2] = Integer.parseInt(in3TextField.getText();
inouttimes[1][2] = Integer.parseInt(out3TextField.getText();
inouttimes[0][3] = Integer.parseInt(in4TextField.getText();
inouttimes[1][3] = out4TextField.getText();
inouttimes[0][4] = in5TextField.getText();
inouttimes[1][4] = out5TextField.getText();
inouttimes[0][5] = in6TextField.getText();
inouttimes[1][5] = out6TextField.getText();
for (int x = 0; x < 2; ++x)
for (int y = 0; y < 2; ++y)
String temp = String.valueOf(inouttimes[x][y]);
if (temp.equals(""))
inouttimes[x][y] = 0;
if (inouttimes[x][y] < 0 && inouttimes[x][y] > 2400)
timeError = true;
break;
if (timeError = true)
break;
messageString = temp.getName() + "\n" + temp.getSsn() + "\n" + temp.getTotalPay();
JOptionPane.showMessageDialog(null, messageString);
}//if (matchBoolean == true)
//if SSN match is false then display error message
else
JOptionPane.showMessageDialog(null, "There is no listing under that Social Security Number.\n" +
"Please verify and re-enter.");
}//end if(source == okButton)
//perform if the Clear button was pressed
if(source == clearButton)
//clear all the textfields
dateTextField.setText("");
ssnTextField.setText("");
in1TextField.setText("");
out1TextField.setText("");
in2TextField.setText("");
out2TextField.setText("");
in3TextField.setText("");
out3TextField.setText("");
in4TextField.setText("");
out4TextField.setText("");
in5TextField.setText("");
out5TextField.setText("");
in6TextField.setText("");
out6TextField.setText("");
sickTextField.setText("");
personalTextField.setText("");
//set text in field to current date
dateTextField.setText(dateString);
public static void main(String args[])
//create new entryscreen object called applet
EntryScreen applet = new EntryScreen();
//create new frame for applet called window
Frame window = new Frame("EntryScreen");
window.addWindowListener(new WindowAdapter()
public void windowClosing(WindowEvent e)
//close the applet
System.exit(0);
//initiate the applet
applet.init();
window.add("Center", applet);
window.pack();
window.setVisible(true);
//create entryscreenlayout custom class to position controls on applet screen
class EntryScreenLayout implements LayoutManager {
public EntryScreenLayout() {
public void addLayoutComponent(String name, Component comp) {
public void removeLayoutComponent(Component comp) {
public Dimension preferredLayoutSize(Container parent) {
Dimension dim = new Dimension(0, 0);
Insets insets = parent.getInsets();
dim.width = 360 + insets.left + insets.right;
dim.height = 487 + insets.top + insets.bottom;
return dim;
public Dimension minimumLayoutSize(Container parent) {
Dimension dim = new Dimension(0, 0);
return dim;
public void layoutContainer(Container parent) {
Insets insets = parent.getInsets();
Component c;
c = parent.getComponent(0);
if (c.isVisible()) {c.setBounds(insets.left+88,insets.top+8,192,24);}
c = parent.getComponent(1);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+48,152,24);}
c = parent.getComponent(2);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+48,152,24);}
c = parent.getComponent(3);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+80,152,24);}
c = parent.getComponent(4);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+80,152,24);}
c = parent.getComponent(5);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+112,152,24);}
c = parent.getComponent(6);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+144,72,24);}
c = parent.getComponent(7);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+144,72,24);}
c = parent.getComponent(8);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+176,72,24);}
c = parent.getComponent(9);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+208,72,24);}
c = parent.getComponent(10);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+240,72,24);}
c = parent.getComponent(11);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+272,72,24);}
c = parent.getComponent(12);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+304,72,24);}
c = parent.getComponent(13);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+336,72,24);}
c = parent.getComponent(14);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+176,72,24);}
c = parent.getComponent(15);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+208,72,24);}
c = parent.getComponent(16);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+240,72,24);}
c = parent.getComponent(17);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+272,72,24);}
c = parent.getComponent(18);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+304,72,24);}
c = parent.getComponent(19);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+336,72,24);}
c = parent.getComponent(20);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+368,152,24);}
c = parent.getComponent(21);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+368,72,24);}
c = parent.getComponent(22);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+400,72,24);}
c = parent.getComponent(23);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+400,152,24);}
c = parent.getComponent(24);
if (c.isVisible()) {c.setBounds(insets.left+104,insets.top+440,72,24);}
c = parent.getComponent(25);
if (c.isVisible()) {c.setBounds(insets.left+184,insets.top+440,72,24);}
c = parent.getComponent(26);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+176,72,24);}
c = parent.getComponent(27);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+208,72,24);}
c = parent.getComponent(28);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+240,72,24);}
c = parent.getComponent(29);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+272,72,24);}
c = parent.getComponent(30);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+304,72,24);}
c = parent.getComponent(31);
if (c.isVisible()) {c.setBounds(insets.left+24,insets.top+336,72,24);}
I know it is a lot of code, but I am just starting and couldn't think of an easier way to do this.
Thank you for any help - it is greatly appreciated. You can email me with any code help - [email protected].
StephMy 2 cents, I dunno what it'll be worth.
I think you should never convert anything until the final moment that you are at actually getting the int or float number of hours.
Why are you doing all this Gregorian and conversion gymnastics throughout your calculations?
To get the current time in milliseconds, use either
java.util.Date d = new java.util.Date();
or
long d = System.currentTimeMillis();
Use this long number for all your calculations, and only at the end convert it. To convert, you can use java.text.SimpleDateFormat, which I find very straightforward to use. I honestly think you should never convert your dates before doing any calculations, only after doing them, otherwise you'll loose precision and make errors for sure. -
Correlate login and logout times in a table
I have a table LOGINDATA with three columns: USERID, TYPE, and TIMESTAMP.
USERID stores a unique integer that represents someone who uses the system.
TYPE is either 1 or 2. 1 represents a login. 2 represents a logout.
TIMESTAMP is a value that comes from System.currentTimeMillis. It represents the current time in milliseconds since January 1, 1970 (I believe that's the right date).
I'm trying to create a query to link each login time with its corresponding logout time, so that my resultset has three columns:
USERID, LOGINTIME, LOGOUTTIME.
I assume this would involve joining the table to itself, but creating a query to find the closest login and logout times is tricky.
What I have now is:
select li.userid, li.logintime, lo.logouttime from
(select userid, timestamp logintime from logindata where type = 1) li,
(select userid, timestamp logouttime from logindata where type = 2) lo
where li.userid=lo.userid
and li.userid=999999 is the userid of one user.
This will actually end up being more complicated with missing logout times, but this is a start.The data design makes this a very very very messy (and probably slow) query. Fundamentally, I consider designs like this to be broken because they're so hard to get relevant information out of the raw data; in some cases impossible (see comments below).
The following query works on Oracle database (where TIMESTAMP is a reserved word, so I used EVENTTIME instead) - I tested it with a few rows of data:
select li.userid, li.logintime, min(possible_logout) logouttime
from (select userid || to_char(eventtime, 'yyyymmddhh24miss') session_id, userid, eventtime logintime
from logindata where type = 1) li,
(select li.userid || to_char(logintime, 'yyyymmddhh24miss') session_id, li.userid, logintime, logouttime possible_logout
from (select userid, eventtime logintime from logindata where type = 1) li,
(select userid, eventtime logouttime from logindata where type = 2) lo
where logintime < logouttime
and li.userid = lo.userid(+) ) pl
where li.session_id = pl.session_id (+)
group by li.userid, li.logintime
order by li.logintime;Note that this will return the wrong result if for a particular user_id, you have overlapping logins, like:
time a - login session 1
time b - login session 2
time c - logout session 1 or 2
time d - logout session 2 or session 1
there is simply no way to tell which logout goes with which login and the query will report that both sessions ended at time c, which is absolutely unacceptable if this is to be a security audit trail... The only way to deal with this is to guarantee at the application layer that no user can be logged in twice.
Note also that it breaks by returning extra rows if a user somehow manages to log in twice or more at the same moment, whatever the granularity of your TIMESTAMP is... This is because of the join on the generated SESSION_ID; if you get 2 or more of them the same, you get a cartesian product (2 IDs, 4 rows; 5 IDs, 25 rows, etc...)
It would obviously be a lot cleaner if you stored some sort of unique session_id in your table. Note that the session_ids used for session tracking in J2EE web servers get recycled over time and are therefore unsuitable (by themselves) as unique session ids. And if you store a session id, then you can fix your broken data model and avoid all this mess in the first place by making your table have the columns:
USER_ID, SESSION_ID, LOGIN_TIME, LOGOUT_TIME
Insert on login, update on logout... -
Tracking User login and logout times
I need to track User Login and Logout times. Does anyone know of a easy way or program to do this?
thanks
b/Applications/Utilities->Terminal->type in this command, and hit the return key:
last
For more information, see http://www.osxfaq.com/tips/unix-tricks/ Week 17. -
How can I get all Login/Logout details
How can I get all Login/Logout details of all SAP Users from SAP Server/Database of any one year? I am asking about SAP License User. Is their any Table or Report by which I can get these details? For example USR02(Logon Data) Table store the last login/logout details of SAP Users. So in same way is any table which store Users Login/Logout details through out a year or month.
Hi Sudheer,
Check this .
You can find the transactions by a particular user from the transaction SM04.
SM04 gives you the details of the users logged in,terminals,transactions the user is working on, the time he has logged in,no of sessions user has opened, and the memory used by the user's programs... all of that w.r.t to the client we login. but we can't get info like date and number of times the user has logged in.
U can see tables:
USR01 User master record (runtime data)
USR02 Logon data
USR03 User address data
USR05 User Master Parameter ID
USR12 User master authorization values
plz rewards points if helpful
cheers
srinivas.k
Edited by: k srinivas on Apr 28, 2008 11:54 AM -
Slow component problem (logon page, login - logout)
Hi All,
since some time i'm experiencing a "slow component" problem with EP.
As a sympthom portal is slow during first logon page and during login - logout.
Jarm trace report the situation below:
Component Name Avg Gross Time (ms) Total Gross Time (ms) Max Gross Time (ms)
UME:SAPJ2EEAuthenticator:getLoggedInUser 90,045 450,226 n/a
AppServer:Security:Authentication:LOGIN:com.sap.security.core.server.jaas.SPNegoLoginModule 90,023 450,116 n/a
AppServer:Security:Authentication:FastLoginContext:login 90,022 900,229 n/a
AppServer:Security:Authentication:LOGIN:com.sun.security.auth.module.Krb5LoginModule 90,006 450,031 n/a
(90 seconds to load login page!!)
Seems to be an UME problem, but logs are OK and the configuration is the same of other systems that work fine.
Anyone has any idea ?
Thanks guru !
LorenzoHi,
I am dealing with exactly the same problem. I hope you should have fixed this problem by now. Please help me fix mine.
Many thanks in advance.
Regards,
Pawan. -
How to capture the Logout time in xMII
Hi Friends,
How to capture the logout time in xMII when the user clicks on Logout link
ThanksSrikanth,
It would be better to use a database table(s) to store your audit trail information than an xml file, which could grow beyond a manageable size and then require housekeeping efforts and file rolling, etc. It would also be much easier to query user related information out of the logs, pareto charts for failed vs. successful login attempts, etc. if the data was stored in a database.
Have you considered modifying the Relogin.jsp page link in the portal's sub-menu bar? How about making your own version of this web page and changing the link pointer? Keep in mind that whatever result you come up with here will need a significant update for NetWeaver UME compatibility in version 12.0.
Regards,
Jeremy -
Login/Logout sync with user control over folders to sync
We have a user who needs modify the folders that are synced periodically.
The user has multiple computers that they keep synced with OS X Server 10.4.10.
We turned background sync to unmanaged and they are able to modify their settings and left login/logoff sync as managed. Any time they login/logoff auto sync does not occur.
How do we configure their settings so that they can adjust the folders that get synced and still have auto sync at login/logoff?Not even sure you can do this but you might look for Login/Logout Hooks that can perform the action your looking to do. There would have to be a way to shell-script the Sync part of RHD which I'm not sure you can.
On the Server Side you can control what get auto synced and what does not in WGM. Then you just set it all to auto on login/logout. -
How to display All User Logged in time & Logout Time?
How to display All User Logged in time & Logout Time?
Hi..
I want to display All user who logged in the portal,
their username,
their time logged in,
their time logged out..
where can i find these information?
do Portal have already something like this?
Plz advise..Thanks.The login information is in the wwlog_activity_log. The logout action is only logged when it is explicit. I am using the last user action time for the logout time so I can determine the duration of the visit.
-
Controlling Login/Logout and Background Sync
Mac OS X Server 10.5.7
Mac OS X Client 10.5.7
Everything setup perfectly and by the book on both Server and Client.
Problem:
Why in God's name has Apple COMBINED the sync rules for both Login/Logout and Background Sync??? It's the most illogical thing and it does not work!!!
Question:
I know how to prevent Background items from Syncing at Login (through the preference manifest), but how to I get the Background sync NOT to sync LOGIN/LOGOUT items.
The problem is always and systematically been mostly with the LIBRARY folder giving all sorts of sync errors. I have tried every possible trick combination but nothing seems to work.
Is this STILL a bug even after a year?? If so, other than skipping the Library folder completely, mobile homes is utterly useless and unreliable. If I skip the Library folder, then mobile homes aren't really complete if a user moves to another machine.
Has anyone found a reliable solution to this mess?
PLEASE HELP.Something is definitely breaking it. Its as if at some random point in time, the sync stops obeying the background rules. I can only conclude that there is still is a bug somewhere that is not fixed.
For example, I initially created the mobile home setting using the computer groups. When that started giving me errors, then I figured, let me try it by doing it via groups. So I created a new group and then, undid the settings for mobile homes that I had set for my computer group.
The first time I logged in, it was working perfectly. Then my laptop's battery died. When I plugged it back, it reconnected to my wireless network and THATS when the bug started showing up again. No matter how many times I restarted, if I have firefox or entourage open, I automatically see that exclamation point in the upper right hand corned (on the mobile homes icon) and its ALWAYS the library files pertaining to those apps that 'are in use'.
This is really frustrating and most non-apple like. This used to work perfectly under Tiger Server, I don't understand how Apple can mess this up THIS BAD and worse, not have a solid fix after a year.
This bug even occurred with a brand new installation of Leopard server on a Xserve and a Mac OS X 10.5.7 station. The instant the mobile user logged on, that exclamation point came on complaining about the entourage files being in use even though that entire folder is set to be SKIPPED during Background Syncing.
Not sure where to look anymore.
And one more thing; as soon as I encounter that exclamation point, the time/date stamp reporting the last sync stops working as well.
Could you provide screenshots of your setup? Could it be that Im missing one tiny detail somewhere? I just dont see where though.
This is an updated output after it breaks (maybe there's a clue in there somewhere)
excludedItems = (
comparison = fullPath;
value = "~/.SymAVQSFile";
comparison = fullPath;
value = "~/.Trash";
comparison = fullPath;
value = "~/.Trashes";
comparison = fullPath;
value = "~/Documents/Microsoft User Data";
comparison = fullPath;
value = "~/Library";
comparison = fullPath;
value = "~/NAVMac800QSFile";
excludedPrefItems = (
comparison = fullPath;
value = "~/.SymAVQSFile";
comparison = fullPath;
value = "~/.Trash";
comparison = fullPath;
value = "~/.Trashes";
comparison = fullPath;
value = "~/Library/Application Support/SyncServices";
comparison = fullPath;
value = "~/Library/Caches";
comparison = fullPath;
value = "~/Library/Logs";
comparison = fullPath;
value = "~/Library/Printers";
comparison = startsWith;
value = "IMAP-";
comparison = startsWith;
value = "Exchange-";
comparison = startsWith;
value = "Mac-";
homeSyncCompleted = 1;
homeSyncTime = 2009-05-25 21:09:29 -0400;
isNewMobileAccount = 0;
periodicSyncOn = 1;
syncPeriodSeconds = 0;
syncedFolders = (
path = "~";
syncedPrefFolders = (
path = "~/Library";
path = "~/Documents/Microsoft User Data";
}
Maybe you are looking for
-
Hi, I have some unique error. Could not process due to error: java.lang.IllegalStateException: Error during RETR epilogue: com.sap.aii.adapter.file.ftp.FTPEx: 426 Unable to send data to TCP/IP. Data transfer ended. Please let me know the issues. Is i
-
Messages killed by spamfilters
Hello, I got problem with spamfilters in MS mail services. People doesn't receive any of my emails from MYDOMAIN.COM. Only when someone add [email protected] to contacts or to whitelist he'll get an email. This is my email header: x-store-info:qAU
-
What do icons indicate in the screensaver source list?
On my system, I have both Aperture and iPhoto, each with lots of photos. When I open the screensaver pref panel, many questions arise if I try to pick out something from the large number of folder, events, project, etc. Is there a place to find out
-
Burn a windows dvd to run on my mac
I hope someone can help me on this. I was given a promotional tourist DVD that looks very interesting. When I put it into my MacBook Pro it shows up on the desktop but I can't run it because it seems to be for Windows only. These are the files on the
-
How to migrate security from 1 bobj instance to another
Hi , I have a requirement how to migrate security from 1 bobj instance to another Please help me for the same . Regards, Abhishek