Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose the software service through the HTTP/JSON API #1069

Merged
merged 24 commits into from
Mar 5, 2024

Conversation

imobachgs
Copy link
Contributor

@imobachgs imobachgs commented Mar 5, 2024

Trello: https://trello.com/c/2MjaulMd/3566-3-expose-the-software-api-over-http

This PR exposes the public1 part of the software API through the HTTP/JSON interface. It includes:

  • /software/patterns: list of patterns, including whether they are selected (and by whom).
  • /software/products: list of products.
  • /software/probe: starts the software probing.
  • /software/config: describing the software configuration.
{
  "patterns": [
    "gnome"
  ],
  "product": "Tumbleweed"
}

Additionally, it exposes the following events through the websocket:

  • PatternsChanged, containing the patterns and who selected them ('user' or 'auto').
  • ProductChanged, with the name of the new product.

Implementation details

In this phase of the development, we are still deciding the best way to implement these HTTP/JSON interfaces. The implementation has two parts:

About the service status, the zbus proxies are cached and can be cloned, so it looks like a good idea to keep our clients as part of the state.

In the future

There are a few improvements we could consider in the future:

  • Split the events in different types depending on the service (SoftwareEvent, ManagerEvent), so those services only know about their types.
  • Consolidate all errors under a common one (e.g., Error::Software(SoftwareError), Error::Manager(ManagerError), etc.) to have a single IntoResponse implementation while keeping modules isolation.

Footnotes

  1. The part of the D-Bus API that it is used by the web UI.

@coveralls
Copy link

coveralls commented Mar 5, 2024

Coverage Status

coverage: 74.401% (-0.3%) from 74.665%
when pulling 4c0cb3b on http-software-srv
into 3392064 on master.

.receive_selected_product_changed()
.await
.then(|change| async move {
if let Ok(id) = change.get().await {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can it happen that change result is not Ok? And if so, in which case? I would at least document it here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it fails, it is because it cannot deserialize the information coming from D-Bus. Our proxy could be outdated, for instance. But I do not think we should put a comment about that in each place where we use this function.

See https://docs.rs/zbus/latest/src/zbus/proxy/mod.rs.html#196-200 (because get documentation) is not enough.

In general, any conversion problem is, most probably, because our proxies are outdated.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok, so basically internal problem and not user side.

1 => Self::Auto,
_ => Self::None,
0 => Ok(Self::User),
1 => Ok(Self::Auto),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

now, I am confused, why is not there 2 => Ok(Self::None)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because it is not expected to get a 2 from the API (it does not exist).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, ok.

@imobachgs imobachgs merged commit 7d5e54c into master Mar 5, 2024
2 checks passed
@imobachgs imobachgs deleted the http-software-srv branch March 5, 2024 13:09
@imobachgs imobachgs mentioned this pull request May 17, 2024
imobachgs added a commit that referenced this pull request May 17, 2024
Prepare for releasing Agama 8. It includes the following pull requests:

* #884
* #886
* #914
* #918
* #956
* #957
* #958
* #959
* #960
* #961
* #962
* #963
* #964
* #965
* #966
* #969
* #970
* #976
* #977
* #978
* #979
* #980
* #981
* #983
* #984
* #985
* #986
* #988
* #991
* #992
* #995
* #996
* #997
* #999
* #1003
* #1004
* #1006
* #1007
* #1008
* #1009
* #1010
* #1011
* #1012
* #1014
* #1015
* #1016
* #1017
* #1020
* #1022
* #1023
* #1024
* #1025
* #1027
* #1028
* #1029
* #1030
* #1031
* #1032
* #1033
* #1034
* #1035
* #1036
* #1038
* #1039
* #1041
* #1042
* #1043
* #1045
* #1046
* #1047
* #1048
* #1052
* #1054
* #1056
* #1057
* #1060
* #1061
* #1062
* #1063
* #1064
* #1066
* #1067
* #1068
* #1069
* #1071
* #1072
* #1073
* #1074
* #1075
* #1079
* #1080
* #1081
* #1082
* #1085
* #1086
* #1087
* #1088
* #1089
* #1090
* #1091
* #1092
* #1093
* #1094
* #1095
* #1096
* #1097
* #1098
* #1099
* #1100
* #1102
* #1103
* #1104
* #1105
* #1106
* #1109
* #1110
* #1111
* #1112
* #1114
* #1116
* #1117
* #1118
* #1119
* #1120
* #1121
* #1122
* #1123
* #1125
* #1126
* #1127
* #1128
* #1129
* #1130
* #1131
* #1132
* #1133
* #1134
* #1135
* #1136
* #1138
* #1139
* #1140
* #1141
* #1142
* #1143
* #1144
* #1145
* #1146
* #1147
* #1148
* #1149
* #1151
* #1152
* #1153
* #1154
* #1155
* #1156
* #1157
* #1158
* #1160
* #1161
* #1162
* #1163
* #1164
* #1165
* #1166
* #1167
* #1168
* #1169
* #1170
* #1171
* #1172
* #1173
* #1174
* #1175
* #1177
* #1178
* #1180
* #1181
* #1182
* #1183
* #1184
* #1185
* #1187
* #1188
* #1189
* #1190
* #1191
* #1192
* #1193
* #1194
* #1195
* #1196
* #1198
* #1199
* #1200
* #1201
* #1203
* #1204
* #1205
* #1206
* #1207
* #1208
* #1209
* #1210
* #1211
* #1212
* #1213
* #1214
* #1215
* #1216
* #1217
* #1219
* #1220
* #1221
* #1222
* #1223
* #1224
* #1225
* #1226
* #1227
* #1229
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants