Skip to content

Commit a8170a4

Browse files
committed
AI stats
1 parent 5156c54 commit a8170a4

File tree

5 files changed

+165
-86
lines changed

5 files changed

+165
-86
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.logicaldoc.gui.frontend.client.ai.model;
2+
3+
import com.logicaldoc.gui.common.client.i18n.I18N;
4+
import com.smartgwt.client.types.HeaderControls;
5+
import com.smartgwt.client.widgets.Window;
6+
7+
public class AIStats extends Window{
8+
9+
public AIStats() {
10+
setHeaderControls(HeaderControls.HEADER_LABEL, HeaderControls.CLOSE_BUTTON);
11+
setTitle(I18N.message("aistats"));
12+
setIsModal(true);
13+
setShowModalMask(true);
14+
setAutoSize(true);
15+
setAutoCenter(true);
16+
17+
addItem(new AIStatsPanel());
18+
}
19+
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
package com.logicaldoc.gui.frontend.client.ai.model;
2+
3+
import java.util.Date;
4+
import java.util.List;
5+
6+
import com.logicaldoc.gui.common.client.DefaultAsyncCallback;
7+
import com.logicaldoc.gui.common.client.beans.GUIParameter;
8+
import com.logicaldoc.gui.common.client.i18n.I18N;
9+
import com.logicaldoc.gui.common.client.util.ItemFactory;
10+
import com.logicaldoc.gui.common.client.util.Util;
11+
import com.logicaldoc.gui.frontend.client.ai.AIService;
12+
import com.smartgwt.client.types.ImageStyle;
13+
import com.smartgwt.client.types.Overflow;
14+
import com.smartgwt.client.types.TitleOrientation;
15+
import com.smartgwt.client.widgets.Img;
16+
import com.smartgwt.client.widgets.form.DynamicForm;
17+
import com.smartgwt.client.widgets.form.fields.SelectItem;
18+
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
19+
import com.smartgwt.client.widgets.layout.VLayout;
20+
21+
/**
22+
* Shows AI's statistics.
23+
*
24+
* @author Marco Meschieri - LogicalDOC
25+
* @since 9.2
26+
*/
27+
public class AIStatsPanel extends VLayout {
28+
29+
private StaticTextItem aiQueries;
30+
31+
private StaticTextItem aiQueriesCurrent;
32+
33+
private Img chartImg;
34+
35+
private Long modelId = null;
36+
37+
public AIStatsPanel() {
38+
setWidth100();
39+
setHeight100();
40+
setMembersMargin(4);
41+
}
42+
43+
public AIStatsPanel(long modelId) {
44+
this();
45+
this.modelId = modelId;
46+
}
47+
48+
@Override
49+
protected void onDraw() {
50+
aiQueries = ItemFactory.newStaticTextItem("aiQueries", I18N.message("totalqueries"), "0");
51+
aiQueriesCurrent = ItemFactory.newStaticTextItem("aiQueriesCurrent", I18N.message("currentmonthqueries"), "0");
52+
53+
DynamicForm form = new DynamicForm();
54+
form.setTitleOrientation(TitleOrientation.LEFT);
55+
form.setNumCols(4);
56+
form.setWidth(1);
57+
form.setPadding(5);
58+
59+
SelectItem tenantStat = prepareTenantStatItem();
60+
61+
form.setItems(tenantStat, aiQueries, aiQueriesCurrent);
62+
63+
addMember(form);
64+
65+
refreshStats(null);
66+
}
67+
68+
private SelectItem prepareTenantStatItem() {
69+
SelectItem tenantStat = ItemFactory.newTenantSelector();
70+
tenantStat.setName("tenantStat");
71+
tenantStat.setTitle(I18N.message("statsfromtenant"));
72+
tenantStat.setColSpan(4);
73+
tenantStat.setWidth("*");
74+
tenantStat.setAllowEmptyValue(true);
75+
tenantStat.setVisible(modelId == null);
76+
tenantStat.addChangedHandler(tenantStatChanged -> refreshStats(
77+
tenantStatChanged.getValue() != null ? Long.parseLong(tenantStatChanged.getValue().toString()) : null));
78+
return tenantStat;
79+
}
80+
81+
private void refreshStats(Long tenantId) {
82+
AIService.Instance.get().getStats(modelId, tenantId, new DefaultAsyncCallback<>() {
83+
@Override
84+
public void onSuccess(List<GUIParameter> parameters) {
85+
if (!parameters.isEmpty()) {
86+
for (GUIParameter parameter : parameters) {
87+
if (parameter.getName().equals("ai.queries"))
88+
aiQueries.setValue(Util.formatLong(Long.parseLong(parameter.getValue())));
89+
else if (parameter.getName().equals("ai.queries.current"))
90+
aiQueriesCurrent.setValue(Util.formatLong(Long.parseLong(parameter.getValue())));
91+
}
92+
} else {
93+
aiQueries.setValue("0");
94+
aiQueriesCurrent.setValue("0");
95+
}
96+
97+
refreshStatsChart(tenantId);
98+
}
99+
});
100+
}
101+
102+
private void refreshStatsChart(Long tenantId) {
103+
if (chartImg != null)
104+
removeMember(chartImg);
105+
106+
int chartWidth = 1200;
107+
int chartHeight = 420;
108+
String chartUrl = Util.contextPath() + "aichart?width=" + chartWidth + "&height=" + chartHeight + "&locale="
109+
+ I18N.getLocale() + "&random=" + new Date().getTime();
110+
if (modelId != null)
111+
chartUrl += "&modelId=" + modelId;
112+
if (tenantId != null)
113+
chartUrl += "&tenantId=" + tenantId;
114+
115+
chartImg = new Img(chartUrl, 600, 440);
116+
chartImg.setImageType(ImageStyle.NORMAL);
117+
chartImg.setImageWidth(chartWidth);
118+
chartImg.setImageHeight(chartHeight);
119+
chartImg.setOverflow(Overflow.AUTO);
120+
121+
addMember(chartImg);
122+
}
123+
124+
boolean validate() {
125+
return true;
126+
}
127+
128+
@Override
129+
public boolean equals(Object other) {
130+
return super.equals(other);
131+
}
132+
133+
@Override
134+
public int hashCode() {
135+
return super.hashCode();
136+
}
137+
}

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/ai/model/ModelStats.java

Lines changed: 2 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,18 @@
11
package com.logicaldoc.gui.frontend.client.ai.model;
22

3-
import java.util.Date;
4-
import java.util.List;
5-
6-
import com.logicaldoc.gui.common.client.DefaultAsyncCallback;
7-
import com.logicaldoc.gui.common.client.Session;
8-
import com.logicaldoc.gui.common.client.beans.GUIParameter;
9-
import com.logicaldoc.gui.common.client.i18n.I18N;
10-
import com.logicaldoc.gui.common.client.util.ItemFactory;
11-
import com.logicaldoc.gui.common.client.util.Util;
12-
import com.logicaldoc.gui.frontend.client.ai.AIService;
13-
import com.smartgwt.client.types.ImageStyle;
14-
import com.smartgwt.client.types.Overflow;
15-
import com.smartgwt.client.types.TitleOrientation;
16-
import com.smartgwt.client.widgets.Img;
17-
import com.smartgwt.client.widgets.form.DynamicForm;
18-
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
19-
import com.smartgwt.client.widgets.layout.VLayout;
20-
213
/**
22-
* Shows model's evaluation panel.
4+
* Shows model's statistics.
235
*
246
* @author Marco Meschieri - LogicalDOC
257
* @since 9.2
268
*/
279
public class ModelStats extends ModelDetailsTab {
2810

29-
private StaticTextItem aiQueries;
30-
31-
private StaticTextItem aiQueriesCurrent;
32-
33-
private Img chartImg;
34-
35-
private VLayout content=new VLayout();
36-
3711
public ModelStats(GUIModel model) {
3812
super(model, null);
3913
setWidth100();
4014
setHeight100();
41-
content.setMembersMargin(4);
42-
addMember(content);
43-
}
44-
45-
@Override
46-
protected void onDraw() {
47-
aiQueries = ItemFactory.newStaticTextItem("aiQueries", I18N.message("totalqueries"), "0");
48-
aiQueriesCurrent = ItemFactory.newStaticTextItem("aiQueriesCurrent", I18N.message("currentmonthqueries"), "0");
49-
50-
DynamicForm form = new DynamicForm();
51-
form.setTitleOrientation(TitleOrientation.LEFT);
52-
form.setNumCols(4);
53-
form.setWidth(1);
54-
form.setPadding(5);
55-
form.setItems(aiQueries, aiQueriesCurrent);
56-
57-
content.addMember(form);
58-
59-
refreshStats();
60-
}
61-
62-
private void refreshStats() {
63-
AIService.Instance.get().getStats(model.getId(), null, new DefaultAsyncCallback<>() {
64-
@Override
65-
public void onSuccess(List<GUIParameter> parameters) {
66-
if (!parameters.isEmpty()) {
67-
for (GUIParameter parameter : parameters) {
68-
if (parameter.getName().equals("ai.queries"))
69-
aiQueries.setValue(Util.formatLong(Long.parseLong(parameter.getValue())));
70-
else if (parameter.getName().equals("ai.queries.current"))
71-
aiQueriesCurrent.setValue(Util.formatLong(Long.parseLong(parameter.getValue())));
72-
}
73-
} else {
74-
aiQueries.setValue("0");
75-
aiQueriesCurrent.setValue("0");
76-
}
77-
78-
refreshStatsChart();
79-
}
80-
});
81-
}
82-
83-
private void refreshStatsChart() {
84-
if (chartImg != null)
85-
removeMember(chartImg);
86-
87-
int chartWidth = 1200;
88-
int chartHeight = 420;
89-
String chartUrl = Util.contextPath() + "aichart?width=" + chartWidth + "&height=" + chartHeight + "&locale="
90-
+ I18N.getLocale() + "&random=" + new Date().getTime() + "&modelId=" + model.getId()+ "&tenantId=" + Session.get().getTenantId();
91-
92-
chartImg = new Img(chartUrl, 600, 440);
93-
chartImg.setImageType(ImageStyle.NORMAL);
94-
chartImg.setImageWidth(chartWidth);
95-
chartImg.setImageHeight(chartHeight);
96-
chartImg.setOverflow(Overflow.AUTO);
97-
98-
content.addMember(chartImg);
15+
addMember(new AIStatsPanel(model.getId()));
9916
}
10017

10118
boolean validate() {

logicaldoc-gui/src/main/java/com/logicaldoc/gui/frontend/client/ai/model/ModelsPanel.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ public void onDraw() {
153153
toolStrip.addButton(settings);
154154
settings.addClickHandler(event -> new AISettings().show());
155155

156+
ToolStripButton stats = new ToolStripButton();
157+
stats.setTitle(I18N.message("stats"));
158+
toolStrip.addButton(stats);
159+
stats.addClickHandler(event -> new AIStats().show());
160+
156161
toolStrip.addSeparator();
157162

158163
ToolStripButton importModel = new ToolStripButton();

logicaldoc-i18n/src/main/resources/i18n/messages.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2725,4 +2725,5 @@ function = Function
27252725
graph = Graph
27262726
stats = Stats
27272727
totalqueries = Total queries
2728-
currentmonthqueries = Current month queries
2728+
currentmonthqueries = Current month queries
2729+
aistats = AI Stats

0 commit comments

Comments
 (0)